使用ADODB查询数据库始终显示错误' BOF或EOF为True,或者当前记录已被删除'

时间:2018-02-19 14:26:31

标签: vba ms-access access-vba ado adodb

我可以使用DAO方法获取数据,但在我当前的公司中,IT部门禁止我添加除ADO之外的参考。所以我想使用ADODB方法从Query中获取数据。 这些数据将用作ListView的行源数据。

这是我的代码。

Private Sub FillListView()

    Dim rs As New ADODB.Recordset
    Dim strSQL As String
    Dim lstItem As ListItem
    Dim strSQL As String

    strSQL = "SELECT * FROM qrySavedQuery"
    rs.Open strSQL, CurrentProject.Connection

    With Me.ListView1
        'Set ListView Style
        .View = lvwReport
        .GridLines = True
        .FullRowSelect = True
        'Clear Headers and List Items
        .ListItems.Clear
        .ColumnHeaders.Clear
    End With

    'Setup Column Headers
    With Me.ListView1.ColumnHeaders
        .Add , , "Col1", 1000, lvwColumnLeft
        .Add , , "Col2", 2000, lvwColumnCenter
        .Add , , "Col3", 1000, lvwColumnCenter
        .Add , , "Col4", 1000, lvwColumnCenter
        .Add , , "Col5", 1700, lvwColumnCenter
        .Add , , "Col6", 800, lvwColumnCenter
        .Add , , "Col7", 1000, lvwColumnCenter
    End With

    rs.MoveFirst
    Do Until rs.EOF
        Set lstItem = Me.ListView1.ListItems.Add()
        lstItem.Text = rs!col1
        lstItem.SubItems(1) = rs!col2
        lstItem.SubItems(2) = rs!col3
        lstItem.SubItems(3) = rs!col4
        lstItem.SubItems(4) = rs!col5
        lstItem.SubItems(5) = rs!col6
        lstItem.SubItems(6) = rs!col7
        rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing
End Sub

从Load Event调用上面的例程,ListView根本没有显示任何数据(错误' BOF或EOF为True,或者当前记录已被删除' )

如果我使用DAO方法更改,一切都还可以。可以毫无问题地获取查询中的所有数据。

我做错了什么?这是错误,因为我使用的是Query而不是Table?如果是,我该怎么办?

修改

我的查询

SELECT t2.col1, t2.[pmu-sn] & "/" & t2.[seedcheck_id] AS col2, 
Nz(t2.[amount],0)-Nz(t3.[delivery_amount],0) AS col3, t4.col4,
t4.col5, t4.col6, t4.col7
FROM (t1 INNER JOIN (t2 LEFT JOIN t3 ON t2.seedcheckdtl_id = t3.seedcheckdtl_id) ON t1.[pmu-sn] = t2.[pmu-sn]) INNER JOIN t4 ON (t2.[pmu-sn] = t4.[pmu-sn]) AND (t1.[pmu-sn] = t4.[pmu-sn])
WHERE (((Nz([amount],0)-Nz([delivery_amount],0))<>0) AND ((t2.seedcheck_id) Like "*-PC*"))
ORDER BY t1.pmu_bunch_id, t2.[pmu-sn] & "/" & [seedcheck_id], t2.[pmu-sn], t2.seedcheck_id;

希望这有助于发现问题。

修改

Screenshot of my office PC.

从我的办公室电脑拍摄的照片。其中没有DAO文件夹。如果没有IT部门的批准,我无法复制它。 顺便说一下,我在自己的笔记本电脑上创建了Access应用程序,也就是Office 2013。

1 个答案:

答案 0 :(得分:1)

尝试添加:

rs.MoveLast

在你的rs.MoveFirst之前

这将迭代整个记录集并正确放置光标。我似乎记得这样做可以缓解您遇到的问题......