You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:35:23