为什么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 

为什么我收到不同的结果?

+1

变化从*通配符为% – nazark

+0

@nazark,它的MS Access,SQL不是服务器! –

+0

尝试用其内容替换查​​询的名称!让我知道发生什么事。 –

尝试通配符从*到%。由于

.Open "SELECT Table1.Code FROM Table1 
WHERE (((Table1.Name) Not Like 'AU %'))", 
CurrentProject.Connection, adOpenStatic, adLockReadOnly 

看到更多details

+3

你是对的,在底层查询中将通配符更改为'%',或者在SQL中指定查询(并且在ADO调用中使用'%'通配符都会产生预期的输出。通配符似乎让我想起为什么我在过去做过有意识的决定,在工作*时使用DAO * Access ... – ThunderFrame

+2

如果您希望内部执行和外部执行之间更一致的行为,您也可以考虑在保存的查询中使用ALIKE而不是LIKE –

+0

谢谢@GordThompson,我用'ALiKE'方法去了,我甚至都不知道它的存在,直到你的评论为止。在Access表达式中它有多远? – ThunderFrame