2009-03-27 1 views
2

Я не очень много кодирую с VB6, но сейчас я обновляю существующее приложение и просто столкнулся с проблемой.Запрос MS Access: почему LIKE ведет себя по-разному при вызове из приложения VB6?

Я понял проблему. В VB6, запросы должны использовать %джокер при использовании LIKE, но в MS Access, вы должны использовать ***** джокер.

Я запрашиваю одну и ту же базу данных - (это в MS Access).

При выполнении запроса из в MS Access, следующий запрос работает:

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

, когда я построить этот запрос в VB6, я должен сделать это:

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

Что происходит? Это нормально?

ответ

5

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

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

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

+0

хорошая точка. возможно Вы правы. – m42

+0

Когда я учился в старшей школе, я работал над устранением проблем, которые люди имели в доступе или в переходе от доступа. Это несовместимый SQL был одной из основных проблем. – Uri

+0

Доступ не имеет собственного SQL, но Jet делает. Он использует * и? для подстановочных знаков, тогда как большинство баз данных используют% и _ для тех же целей. Если вы используете Access 2003 или более позднюю версию, вы можете настроить их для использования режима ANSI 92, и вы сможете использовать% и _ внутри Access. –

0

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

+0

Это на самом деле чиновник в доступе http://office.microsoft.com/en-us/access/HP010322531033.aspx В пределах доступа, вы должны использовать его, насколько я помню. – Uri

+0

Замена *%% в результатах доступа в 0 найденных записей. Я уверен, что то же самое происходит при запросе одной и той же базы данных из приложения vb.net. Я всегда должен использовать *. Это единственный случай, который я нашел с доступом, где% фактически работает. но я тоже слышал, что требуется% – m42

+0

Не ДОСТУП, но JET. –

0

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

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

+1

Нет, на самом деле это разница между ANSI-89 Query Mode (который всегда используется DAO) и ANSI-92 Query Mode (который всегда использует ADO). Доступ может использоваться либо в зависимости от того, который в настоящее время установлен для пользовательского интерфейса. – onedaywhen

5

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

Operator Comparison

Changing the mode Access uses

+0

Мне действительно нравится это лучше, чем мой собственный (принятый) ответ. – Uri

+0

Почему, спасибо @Uri ... – cmsjr

+0

сложно выбрать только один ответ. нам нужен вариант для того, чтобы сказать «правильные ответы:« Полезно ». – m42

1

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

Alike в% символов 'что-то%%'

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

+0

Да, он применяет данные о том, как и как использовать ConEct для ACE/Jet. – onedaywhen

0

Да, вы можете уйти с 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 
> 

Конечно вы получаете совместимость с доступом, но затем потерять ANSI SQL-92 совместимость для последующего обновления до SQL Server и т. д. и в конечном итоге сделать больше работы для себя.

 Смежные вопросы

  • Нет связанных вопросов^_^