Access VBA中向多值数字查阅字段插入数据的方法
Access VBA向数字类型多值查阅字段插入数据的正确方法
Access的多值查阅字段本质是通过隐藏的关联表存储数据,直接用普通INSERT语句无法正确插入多值,以下是两种可行的实现方法:
方法1:使用DAO记录集操作(推荐)
通过操作主表记录集和多值字段的子记录集,能连贯完成新增主记录+插入多值的操作,逻辑更清晰:
Private Sub buttRec_Click() Dim db As DAO.Database Dim rsMain As DAO.Recordset Dim rsMulti As DAO.Recordset Set db = CurrentDb ' 打开主表记录集并新增一条记录 Set rsMain = db.OpenRecordset("TABB", dbOpenDynaset) rsMain.AddNew ' 若主表有其他必填字段,在此赋值,例如:rsMain!Name = "测试记录" rsMain.Update rsMain.Bookmark = rsMain.LastModified ' 定位到刚插入的主记录 ' 打开多值字段BNUM的子记录集 Set rsMulti = rsMain!BNUM.Value ' 逐个添加多值 rsMulti.AddNew rsMulti!Value = 1 rsMulti.Update rsMulti.AddNew rsMulti!Value = 2 rsMulti.Update rsMulti.AddNew rsMulti!Value = 3 rsMulti.Update ' 清理对象 rsMulti.Close rsMain.Close Set rsMulti = Nothing Set rsMain = Nothing Set db = Nothing End Sub
方法2:直接操作隐藏关联表
Access会为多值字段自动创建隐藏表,命名规则为主表名_多值字段名(例如TABB表的BNUM字段对应隐藏表TABB_BNUM),表中包含两个字段:ID(关联主表的主键)和Value(存储多值的数值)。
如果是给已存在的主表记录添加多值,可直接向隐藏表插入数据:
Private Sub buttRec_Click() Dim db As DAO.Database Set db = CurrentDb ' 假设主表中目标记录的主键ID为1,插入多值1、2、3 db.Execute "INSERT INTO TABB_BNUM (ID, Value) VALUES (1, 1), (1, 2), (1, 3);" Set db = Nothing End Sub
注意事项
- 隐藏表的命名会自动处理特殊字符,例如字段名含空格时会替换为下划线(如
BNUM 测试对应TABB_BNUM__测试),可通过Access导航栏显示隐藏对象查看准确表名 - 插入的数值必须是多值字段关联表中存在的有效值,否则会触发约束错误
- 若需同时新增主记录和多值,优先使用DAO记录集方法,避免手动处理主键同步问题
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

