【问题标题】:How to load a multiline recordset into an Access form with VBA如何使用 VBA 将多行记录集加载到 Access 表单中
【发布时间】:2021-09-10 05:34:48
【问题描述】:

我正在运行一个查询(它返回正确的数据),但是如何循环记录集并使用 VBA 在表单中添加每一行?因为它目前正在重复添加最后一行。

Private Sub buscarReservasFio()
Dim strSQL As String
strSQL = "SELECT * FROM tblReservasFio WHERE fk_solicitacao = " & "'" & arrParameters(0) & "'"
Set db = CurrentDb
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
        rs.MoveNext
    Loop
End If

rs.Close
db.Close
Set rs = Nothing
Set db = Nothing

End Sub

【问题讨论】:

  • P.S.:我需要循环加载每一行的记录集,因为其中一个字段 (Me.nr_peso) 将使用 VBA 重新计算,然后显示给用户手动编辑或确认信息。
  • 这毫无意义。表单必须具有 RecordSource 和绑定到字段的控件才能显示多条记录。
  • 我没有看到任何 nr_peso 的计算 - 这究竟是什么时候发生的?

标签: vba forms ms-access recordset


【解决方案1】:

显然,表单已绑定到表格,但您的代码正在填充 UNBOUND 控件。这是我可以复制您的输出的唯一方法 - 这应该是预期的。显示多行相同数据的原因是因为控件(BOUND 或 UNBOUND)对每条记录重复,并且由于只有一组控件,因此所有行的 UNBOUND 控件中显示相同的数据 - 来自记录集循环的最后一条记录。逐步调试并观察表单上的数据变化。 GoToRecord 操作没有意义,因为没有数据输入到 BOUND 控件。没有那条线,结果是一样的。

为了显示表中的多条记录,请将控件绑定到字段。然后,在表单首次打开时使用新计算值修改 nr_peso 字段的选项:

  1. 运行 UPDATE 操作 SQL

  2. 打开表单的 RecordsetClone 的记录集并循环遍历该记录集并更改 nr_peso 字段的值 - RecordsetClone 中的更改将立即反映在表单中

  3. 代码物理移动到表单上的每条记录并修改字段值

【讨论】:

  • 非常感谢!我不知道这种方法。它应该可以完美运行,而且更简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多