为啥在 Access 中返回 835 条记录的查询会在 VBA 代码中返回一个空记录集?

Posted

技术标签:

【中文标题】为啥在 Access 中返回 835 条记录的查询会在 VBA 代码中返回一个空记录集?【英文标题】:Why would a query that returns 835 records in Access, return an empty recordset in VBA code?为什么在 Access 中返回 835 条记录的查询会在 VBA 代码中返回一个空记录集? 【发布时间】:2013-10-01 18:13:21 【问题描述】:

以下代码是根据我在我从事的几乎每个项目(在 Access 中)中使用的一些样板进行了略微修改的。此代码的所有其他版本都可以在此数据库中完美运行。这些表实际上都在 SQL Server 中,但它们在此 Access db 中链接。

这是奇怪的部分...当我运行代码并进入“With rs”并执行“.Open”时,下一步“Do While Not .EOF”会跳到“Do”的底部“......我在.EOF!但是,如果我获得“.Source”SQL 语句的副本并将其粘贴到非代码 Access 主窗口上的空白 SQL 查询中,我会从该查询中获得 835 条记录。当这个查询应该返回 835 条记录时,我怎么能返回一个空记录集?

我尝试更改我的 .CursorType 和 .LockType,但无济于事。

有人对我可以尝试解决此问题有什么想法吗?

Public Sub test()
Dim db As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sFromDate As String
Dim sToDate As String
Dim sSubUnit As String

sFromDate = "1/1/2013"
sToDate = "1/31/2013"
sSubUnit = "2???"

' Make a connection to the db
Set db = CurrentProject.Connection

With rs
    .ActiveConnection = db
    .CursorType = adOpenForwardOnly
    .LockType = adLockReadOnly

    .Source = "SELECT SCEVENT.CLIENT_ID, SCATTEND.EMP_ID, SCATTEND.STARTDATE, SCATTEND.SVC_ID " & _
                "FROM SCATTEND LEFT JOIN SCEVENT ON SCATTEND.SCEVENT_ID = SCEVENT.ID " & _
                "WHERE (SCATTEND.STARTDATE Between #" & sFromDate & "# And #" & sToDate & "#) " & _
                    "AND (SCATTEND.SUBUNIT_ID Like '" & sSubUnit & "') " & _
                    "AND ((APPTYP_ID IS NULL) OR (APPTYP_ID IN (1,2))) " & _
                "ORDER BY SCEVENT.CLIENT_ID, SCATTEND.EMP_ID, SCATTEND.STARTDATE, SCATTEND.SVC_ID;"
    .Open
    Do While Not .EOF
        MsgBox "there are records!"
        .MoveNext
    Loop
    .Close
End With

Set rs = Nothing
Set db = Nothing

结束子

【问题讨论】:

【参考方案1】:

这可能与 ADO 和 DAO 的区别有关

Difference between ADO and DAO

【讨论】:

就是这样!我更改了我在 sSubUnit 字符串中使用的单个字符通配符(从“2???”到“2%”)和瞧!有用。非常感谢你的文章。

以上是关于为啥在 Access 中返回 835 条记录的查询会在 VBA 代码中返回一个空记录集?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 ADO 记录集返回的记录比基础 Access 查询多

数据集重新调整 0 条记录,但在 access 2013 中执行时,相同的查询返回多条记录

VBA Access SQL SELECT查询只返回一条记录

为啥 MS-Access 中的 Teradata 查询比 SQL Server 更快

为啥access数据表中有一条记录不能修改

ACCESS 2010 SQL 没有返回数据。 SQL 返回数据相同的查询