【问题标题】:VBA: How to add entire row of recordset into form listVBA:如何将整行记录集添加到表单列表中
【发布时间】:2016-01-13 16:26:27
【问题描述】:

我有 Excel VBA 代码,它在 access 数据库上运行选择查询并返回记录集。连接工作正常。当我得到记录集时,我可以很好地访问每一行中的每个字段。这是我目前使用的:

Sub accessSelect(sql)
Set rs = New ADODB.Recordset
Call accessConnection

With rs
    .Open sql, conn
End With

Do While Not rs.EOF
    'rtvEditForm.rtvList is a list box.
    rtvEditForm.rtvList.AddItem rs(1) & " - " & rs(2)
    rs.MoveNext
Loop
End Sub

我希望能够将整个rs 扔到rtvEditForm.rtvList 中,而不必参考每个字段。我已经尝试过rtvEditForm.rtvList.AddItem rs,但这不起作用,因为我收到“类型不匹配”错误。

看起来很简单,但我就是想不通。我将如何使用我当前的代码做到这一点?

【问题讨论】:

  • rtvList是什么控件?
  • rtvList 是一个列表框。更新了我原来的帖子。
  • 我不相信有,但你可以为 f=0 到 rs.fields.count-1:strToAdd =strToAdd & rs.fields(f).value & ",":next f :cbo.AddItem strToAdd
  • 哦等等....列表框是 Excel 工作表上的 ActiveX 列表框还是在 Access 表单中?

标签: excel vba ms-access recordset


【解决方案1】:

无需进行任何循环。列表框有一个记录集属性,可以是bound to an ADO recordset

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Set cn = New ADODB.Connection

Set cn = CurrentProject.Connection

Set rs = New ADODB.Recordset

With rs
    Set .ActiveConnection = cn
    .Source = sql
    .LockType = adLockOptimistic
    .CursorType = adOpenKeyset
    .Open
End With

Set Me.rtvList.Recordset = rs
rtvList.ColumnCount = rs.Fields.Count

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多