MS Access查询:为什么LIKE在从VB6应用程序调用时表现不同?

时间:2009-03-27 17:32:31

标签: sql ms-access vb6

我没有使用VB6进行大量编码,但我现在正在更新现有的应用程序,只是遇到了障碍。

我弄明白了这个问题。在VB6中,使用 LIKE 时,查询必须使用 通配符,但在MS Access中,您必须使用***** 外卡

我正在查询同一个数据库 - (它在MS Access中)。

从MS Access中查询时,以下查询有效:

SELECT * FROM table WHERE field LIKE '*something*'

当我在VB6中构建该查询时,我必须这样做:

SELECT * FROM table WHERE field LIKE '%something%'

发生了什么事?这是正常的吗?

6 个答案:

答案 0 :(得分:5)

Access过去常常有自己不兼容的SQL版本,所以我认为它是出于遗留原因使用*。

当您使用VB6时,通常使用ODBC和更标准化的SQL,因此应用更常见的通配符。请记住,VB6并不关心您使用哪个数据库,因此如果您使用其他内容(例如,SQL服务器),它可能只会理解百分号。

我猜测Access-ODBC连接器会为您转换内容。

答案 1 :(得分:5)

Access默认使用ANSI-89通配符的子集VB6,通过ADO连接将使用ANSI-92。

Operator Comparison

Changing the mode Access uses

答案 2 :(得分:1)

我不知道这是否适用于VB6,但在Access中,您可以使用

ALIKE'%something%'

并且%字符将被视为通配符,无论您是使用带有DAO还是ADO的VBA,还是在查询编辑器中创建查询。

答案 3 :(得分:0)

我从来没有见过星号字符用作类似语句的通配符(就在其他地方) - 一般来说,百分号是您需要使用的。

答案 4 :(得分:0)

是的,这是正常的。

我认为它与DAO(Access内部使用)和ADO(VB6用于与Access通信的内容)之间的区别。

答案 5 :(得分:0)

是的,您可以在Jet 4.0 OLE DB查询中使用ALIKE(即使用ADO从VB6获取):

JeTTY version 0.5.68
>open booksale.mdb;
#Opened database booksale.mdb (Jet3X "97")
>select * from authors where author like "ba*";
#No rows to display
>select * from authors where author like "ba%";
               Page 1 of 1
Au_ID Author     Year Born
───── ────────── ─────────
10    Bard, Dick 1941
>select * from authors where author alike "ba%";
               Page 1 of 1
Au_ID Author     Year Born
───── ────────── ─────────
10    Bard, Dick 1941
>

当然,您获得了与Access的兼容性,但失去了 ANSI SQL-92兼容性,以便以后升级到SQL Server等,最终为自己做更多工作。