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

如何用VBA将多行记录集加载到Access窗体并解决重复添加最后一行问题

问题原因

你的代码在循环给窗体绑定控件赋值后,没有主动触发记录保存操作。Access绑定窗体默认会延迟提交记录变更,导致前面多次的字段赋值都被最后一次的记录值覆盖,最终只会批量写入多份最后一行的记录。

修正方案

在每次给当前新记录的所有字段赋值完成后,添加Me.Dirty = False主动触发记录保存即可,修改后的完整代码如下:

Private Sub buscarReservasFio()
    Dim strSQL As String
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    
    Set db = CurrentDb
    ' 对参数做单引号转义,避免SQL语法错误
    strSQL = "SELECT * FROM tblReservasFio WHERE fk_solicitacao = '" & Replace(arrParameters(0), "'", "''") & "'"
    Set rs = db.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges)
    
    If rs.BOF Or rs.EOF Then
        'to-do insert
        MsgBox "Insert"
    Else
        Do Until rs.EOF
            DoCmd.GoToRecord , , acNewRec
            Me.ds_funcao = rs.Fields("ds_funcao").Value
            Me.fk_titulo = rs.Fields("fk_titulo").Value
            Me.nr_cor = rs.Fields("nr_cor").Value
            Me.nr_peso = rs.Fields("nr_peso").Value
            Me.dt_liberacao = rs.Fields("dt_liberacao").Value
            Me.dt_baixa = rs.Fields("dt_baixa").Value
            ' 主动保存当前新记录
            Me.Dirty = False
            rs.MoveNext
        Loop
    End If
    
    rs.Close
    db.Close
    Set rs = Nothing
    Set db = Nothing
End Sub
额外优化建议
  • 代码模块开头添加Option Explicit强制变量声明,避免未定义变量引发的异常
  • 如果需要更稳定不受窗体焦点、状态影响,可以直接操作窗体的Recordset对象添加记录,替代DoCmd.GoToRecord的写法

内容的提问来源于stack exchange,提问作者Julia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 07:45:06