Запрос MS Access: почему LIKE ведет себя по-разному при вызове из приложения VB6? - PullRequest
2 голосов
/ 27 марта 2009

Я не много пишу с 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 ]

5 голосов
/ 27 марта 2009

Access будет использовать подмножество подстановочных знаков ANSI-89 по умолчанию, VB6, при подключении через ADO будет использоваться ANSI-92.

Сравнение операторов

Изменение режима доступа использует

5 голосов
/ 27 марта 2009

Access имел собственную несовместимую версию SQL, поэтому я думаю, что он использует * по устаревшим причинам.

Когда вы используете VB6, вы обычно используете ODBC и более стандартизированный SQL, поэтому применяются более распространенные подстановочные знаки. Помните, что VB6 не волнует, какую БД вы используете, поэтому, если бы вы использовали что-то другое (например, SQL-сервер), он, вероятно, понимал бы только знаки процента.

Я предполагаю, что коннектор Access-ODBC преобразует вещи для вас.

1 голос
/ 28 марта 2009

Я не знаю, относится ли это к VB6, но в Access вы можете использовать

ALIKE "% что-то%"

и символы% будут рассматриваться как символы подстановки, независимо от того, используете ли вы VBA с DAO или ADO или создаете запрос в редакторе запросов.

0 голосов
/ 29 марта 2009

Да, вы можете обойтись без ALIKE в запросе Jet 4.0 OLE DB (т.е. из VB6 с использованием ADO):

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 и т. Д. И, в конечном счете, делаете больше для себя.

0 голосов
/ 27 марта 2009

Да, это нормально.

Я думаю, что разница между DAO (что Access использует внутри) и ADO (что VB6 использует для общения с Access).

0 голосов
/ 27 марта 2009

Я никогда не видел, чтобы символ звездочки использовался в качестве подстановочного знака для оператора like (просто везде) - вообще говоря, знак процента - это то, что вам нужно использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...