【发布时间】:2018-07-29 19:28:13
【问题描述】:
我可以使用 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 方法进行更改,一切都会好起来的。查询中的所有数据都可以毫无问题地获取。
我做错了什么?这个错误是因为我使用的是查询而不是表吗?如果是,我该怎么办?
编辑
我的查询
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 部门批准,我不能复制它。 顺便说一句,我在自己的笔记本电脑(也是 Office 2013)中创建了 Access 应用程序。
【问题讨论】:
-
您的查询是否包含从报表或表单中获取的用户定义函数或参数?也许共享查询会有所帮助。
-
但在我目前的公司,IT 部门禁止我添加 ADO 以外的参考 - 他们疯了吗? DAO 是 Access 中的本机数据访问库(除了 ca. Access 2000)。
-
添加到 Andre 的反应中,您不需要添加引用即可使用 DAO。它是 Access 原生的,因此您始终可以在 Access 中使用它。
-
@y2a 我相信它相当于
IIF(t2.[amount] IS NOT NULL, t2.[amount], 0)。 -
这是.accdb,不是.mdb,对吧?该引用列表中应该有
Microsoft Office 15.0 Access database engine Object Library- 选中并取消选中旧的DAO 3.6。