为什么ADO记录集比底层访问查询
我有一个表Table1
在Access 2016(主键= Code
)具有以下值返回更多的记录:为什么ADO记录集比底层访问查询
SELECT Table1.Code
FROM Table1
WHERE (((Table1.Name) Not Like "AU *"));
在Access中,查询返回1分的记录,符合市场预期:
Code
======
A4
======
但是,当我打开使用ADO 2.8或6.1的查询,使用此代码:
Option Compare Database
Option Explicit
Sub test()
Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
With rst
.Open "Query1", CurrentProject.Connection, adOpenStatic, adLockReadOnly
Do While Not .EOF
Debug.Print .Fields("Code").Value
.MoveNext
Loop
Debug.Print "Record Count : " & .RecordCount
.Close
End With
End Sub
所有4个返回的记录,通过调试输出为证:
A1
A2
A3
A4
Record Count : 4
为什么我收到不同的结果?
尝试通配符从*到%。由于
.Open "SELECT Table1.Code FROM Table1
WHERE (((Table1.Name) Not Like 'AU %'))",
CurrentProject.Connection, adOpenStatic, adLockReadOnly
看到更多details
你是对的,在底层查询中将通配符更改为'%',或者在SQL中指定查询(并且在ADO调用中使用'%'通配符都会产生预期的输出。通配符似乎让我想起为什么我在过去做过有意识的决定,在工作*时使用DAO * Access ... – ThunderFrame
如果您希望内部执行和外部执行之间更一致的行为,您也可以考虑在保存的查询中使用ALIKE而不是LIKE –
谢谢@GordThompson,我用'ALiKE'方法去了,我甚至都不知道它的存在,直到你的评论为止。在Access表达式中它有多远? – ThunderFrame
变化从*通配符为% – nazark
@nazark,它的MS Access,SQL不是服务器! –
尝试用其内容替换查询的名称!让我知道发生什么事。 –