【问题标题】:MS Access Listbox shows only one record when its recordset is set to an ADODB recordset from SqliteMS Access Listbox 在其记录集设置为 Sqlite 的 ADODB 记录集时仅显示一条记录
【发布时间】:2021-11-25 12:48:05
【问题描述】:

我尝试使用命令按钮更新列表框,单击带有 ADODB 记录集的 MS Access 表单到 Sqlite 数据库文件。
记录集 RecordCount 属性正确返回 100 条记录,但列表框仅在代码运行时显示记录集中的第一行/记录。
这个列表框出了什么问题,我错过了什么??!感谢您的帮助。
代码如下:

Private Sub cdRefresh_Click()
    Dim Cnn As Object, Rst As Object
    Dim cnString As String, SqlStr As String
    
    cnString = "DRIVER=SQLite3 ODBC Driver;Database=E:\Sample Data\Sales1.db"
    Set Cnn = VBA.CreateObject("ADODB.Connection")
    SqlStr = "Select * From Sales Limit 100;"
    Cnn.Open cnString
    Set Rst = VBA.CreateObject("ADODB.Recordset")
    With Rst
        Set .ActiveConnection = Cnn
        .Source = SqlStr
        .LockType = 3 '' adLockOptimistic
        .CursorType = 1 '' adOpenKeyset
        .Open
    End With
    Debug.Print "records #"; Rst.RecordCount '' despite RecordCount>1 , the listbox only shows one record
    With Me.List0
        .RowSourceType = "Table/Query"
        .ColumnCount = Rst.Fields.Count
        .ColumnHeads = True
        Set .Recordset = Rst
    End With
    Set Rst = Nothing
    Set Cnn = Nothing
    
End Sub

【问题讨论】:

  • 我无法重现这个。
  • 我不认为设置一个列表框。 recordset 将带您到任何地方。我认为你需要设置它的行源。记录集此时只会显示一条记录,即第一条记录。
  • 快速尝试rst.MoveLastrst.MoveFirst 以确保加载整个记录集并且指针位于第一条记录。 @Minty这不是真的,设置列表框的记录集是一件有效的事情,并且在使用外部数据库时通常是可取的(使您免于进行大量的直通查询)
  • 我会纠正的,我以前从未见过这样使用过的属性。像往常一样 - 每天都学点东西。

标签: ms-access listbox adodb ms-access-2016 recordset


【解决方案1】:

感谢所有在这里发表评论并做出贡献的人。
我可以通过将此属性添加到上述代码的 ADODB.Recordset 属性集来解决我的问题;

Rst.CursorLocation = 3 '' adUseClient  

CursorLocation 的默认值为 2“adUseServer”,主要由连接类型决定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多