Access中DAO代码仅写入表首条记录,需指定写入对应记录
问题根源
你的代码里Set rs1 = db.OpenRecordset("Table1")直接打开了整个表的记录集,默认光标停在第一条记录上,所以每次都会把图片存入第一条记录的附件字段。
修改方案
要定位到当前表单触发按钮的那条记录,需要利用表的主键字段(比如假设你的表主键是ID,表单上有绑定该字段的控件)来筛选记录集。
修改后的代码如下:
Private Sub Command21_Click() Dim db As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset2 Dim strFile As String Dim currentRecordID As Variant ' 存储当前记录的主键值 Set db = CurrentDb() strFile = "C:\Users\Reception\Desktop\Files\Signature\sign.png" ' 获取当前表单的主键值(这里假设主键字段是ID,根据你的实际表结构修改) currentRecordID = Me!ID.Value ' 打开记录集时,用WHERE子句定位到当前记录 Set rs1 = db.OpenRecordset("SELECT * FROM Table1 WHERE ID = " & currentRecordID, dbOpenDynaset) If Not rs1.EOF Then ' 确认找到目标记录 rs1.Edit Set rs2 = rs1!GuestRegistration.Value With rs2 .AddNew !FileData.LoadFromFile strFile .Update End With rs1.Update Me.Refresh ' 刷新当前表单,显示更新后的附件 Else MsgBox "未找到对应记录!" ' 处理找不到记录的异常情况 End If ' 释放对象 Set rs2 = Nothing Set rs1 = Nothing Set db = Nothing End Sub
关键修改点说明
- 定位目标记录:通过
SELECT * FROM Table1 WHERE ID = " & currentRecordID精准找到当前表单对应的记录,替换ID为你表实际的主键字段名(比如ContractID、GuestID等)。 - 异常处理:增加
If Not rs1.EOF Then判断,避免找不到记录时出错。 - 表单刷新:用
Me.Refresh替代Form.Refresh,更精准地刷新当前表单。
内容的提问来源于stack exchange,提问作者asmodeusSlayerrr74
相关产品推荐
相关产品推荐

