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

为什么在Access中返回835条记录的查询会在VBA代码中返回空记录集?,vba,adodb,recordset,Vba,Adodb,Recordset,下面的代码是从我在Access中工作的几乎每个项目中使用的一些样板文件中稍微修改的。此代码的所有其他版本在该数据库中都能完美工作。这些表实际上都在SQL Server中,但它们在这个Access数据库中链接 这是奇怪的部分…当我运行代码并进入“With rs”并执行.Open时,下一步“do While Not.EOF”跳到“do”的底部…我在.EOF!但是,如果我获得“.Source”SQL语句的副本并将其粘贴到非代码访问主窗口上的空白SQL查询中,我将从该查询中获得835条记录。当这个查询应

下面的代码是从我在Access中工作的几乎每个项目中使用的一些样板文件中稍微修改的。此代码的所有其他版本在该数据库中都能完美工作。这些表实际上都在SQL Server中,但它们在这个Access数据库中链接

这是奇怪的部分…当我运行代码并进入“With rs”并执行.Open时,下一步“do While Not.EOF”跳到“do”的底部…我在.EOF!但是,如果我获得“.Source”SQL语句的副本并将其粘贴到非代码访问主窗口上的空白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

End Sub

它可能与ADO和DAO之间的差异有关


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