【发布时间】:2016-06-21 08:46:25
【问题描述】:
我在 Access 2016 中有一个表 Table1(主键 = Code),其值如下:
=====+=============
Code + Name
=====+=============
A1 | AU All
A2 | AU Large
A3 | AU Size
A4 | Unassigned
=====+=============
我有一个查询,Query1 定义为:
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
为什么我得到不同的结果?
【问题讨论】:
-
将通配符从 * 更改为 %
-
@nazark,它是 MS Access,而不是 SQL 服务器!
-
尝试将查询的名称替换为它的内容!让我知道会发生什么。
-
你误解了我想告诉你的内容。您必须将
SELECT Table1.Code FROM Table1 WHERE (((Table1.Name) Not Like "AU *"));作为 ADO.Recodset 的Open方法的第一个参数传递,而不是Query1! -
@MaciejLos 源是查询名称还是底层 SQL 没有区别。在查询中或在 SQL 字符串中将通配符从
*更改为%确实产生了预期的结果。