我可以使用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;
希望这有助于发现问题。
修改
从我的办公室电脑拍摄的照片。其中没有DAO文件夹。如果没有IT部门的批准,我无法复制它。 顺便说一下,我在自己的笔记本电脑上创建了Access应用程序,也就是Office 2013。
答案 0 :(得分:1)
尝试添加:
rs.MoveLast
在你的rs.MoveFirst之前
这将迭代整个记录集并正确放置光标。我似乎记得这样做可以缓解您遇到的问题......