Access VBA中如何更新多值Lookup字段Desi_DB?
Access VBA 更新多值Lookup字段的正确方法
Access的多值Lookup字段本质是后台关联的隐藏表,标准SQL UPDATE语句无法直接对其赋值,必须通过DAO记录集操作字段的子集合。以下是可行的实现方案:
完整代码示例(替换原有值为3、5、9)
Dim rs As DAO.Recordset Dim rsMulti As DAO.Recordset2 ' 多值字段对应的子记录集 ' 打开目标记录的动态集 Set rs = CurrentDb.OpenRecordset("SELECT Desi_DB FROM OrderA WHERE ID = 3", dbOpenDynaset) If Not rs.EOF Then rs.Edit ' 获取多值字段的子记录集对象 Set rsMulti = rs.Fields("Desi_DB").Value ' 清空原有值(若需保留原有值,可删除此循环) Do While Not rsMulti.EOF rsMulti.Delete rsMulti.MoveNext Loop ' 逐个添加目标值 With rsMulti .AddNew: !Value = 3: .Update .AddNew: !Value = 5: .Update .AddNew: !Value = 9: .Update End With ' 清理子记录集 rsMulti.Close Set rsMulti = Nothing ' 保存主记录更新 rs.Update End If ' 清理对象 rs.Close Set rs = Nothing
常见问题说明
- 你之前尝试的
DLookup只会返回多值字段的显示字符串(如"3;5;9"),无法直接用于更新实际存储的关联值。 - 直接调用
rs.Fields("Desi_DB").AddItem无效,因为多值字段的集合操作必须通过Recordset2类型的子记录集来完成。 - 直接给
rs("Desi_DB").Value赋值数组或字符串也不生效,因为该字段的Value属性返回的是子记录集对象,而非简单数据类型。
追加值的修改方案
如果不需要清空原有值,仅需追加3、5、9,只需删除清空循环的代码,直接执行添加操作即可。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

