如何用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
相关产品推荐
相关产品推荐

