2016-06-21 91 views
2

我有一個表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

嘗試用其內容替換查​​詢的名稱!讓我知道發生什麼事。 –

回答

4

嘗試通配符從*到%。由於

.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