Wildcards do Microsoft Jet: asterisco ou sinal de porcentagem?

Qual é o caractere curinga multi-caractere adequado no operador LIKE no Microsoft Jet e qual configuração afeta (se houver)? Eu estou apoiando um antigo aplicativo ASP que é executado no Microsoft Jet (em um database Access) e usa o símbolo% no operador LIKE, mas tenho um cliente que aparentemente tem problemas em seu ambiente porque o caractere% é entendido como regular personagem, e eu suponho que seu curinga multi-caractere é *. Além disso, tenho quase certeza de que, no passado, escrevi o aplicativo com consultas usando * em vez de%. Finalmente, o Microsoft Access (como um aplicativo) também funciona apenas com * e não% (mas não tenho certeza de como isso é relevante).

Eu passei apenas 20 minutos pesquisando na Internet sem nenhum resultado útil, então achei que seria útil perguntar no stackoverflow. Alguém pode já saber, e é melhor manter as possíveis respostas no stackoverflow do que qualquer outro fórum de discussão aleatória.

A resposta direta é que o comportamento dos caracteres curinga depende do modo de consulta ANSI da interface que está sendo usada.

O modo de consulta ANSI-89 (‘modo tradicional’) usa o caractere * , o modo de consulta ANSI-92 (‘modo de compatibilidade do SQL Server’) usa o caractere % . Esses modos são específicos do ACE / Jet e apresentam apenas uma semelhança de passagem com os padrões ANSI / ISO SQL-89 e SQL-92.

A interface do ADO (OLE DB) sempre usa o modo de consulta ANSI-92.

A interface do DAO sempre usa o modo de consulta ANSI-89.

Ao usar o ODBC, o modo de consulta pode ser explicitamente especificado por meio do sinalizador ExtendedAnsiSQL .

A interface de usuário do MS Access, a partir da versão 2003, pode usar o modo de consulta, portanto, não presuma que seja um ou outro em um determinado momento (por exemplo, não use caracteres curinga específicos do modo de consulta em Regras de validação).

A syntax do ACE / Jet SQL tem uma palavra-chave ALIKE , que permite que os caracteres ANSI-92 Query Mode ( % e _ ), independentemente do modo de consulta da interface, tenham a pequena desvantagem da palavra-chave ALIKE não ser compatível com SQL-92 ALIKE permanece altamente portátil). A principal desvantagem, no entanto, é que eu entendo que a palavra-chave ALIKE não é oficialmente suportada (embora eu não possa imaginar que ela desapareça ou tenha um comportamento alterado em breve).

Se você estiver usando o DAO, use um asterisco (e um ponto de interrogação para um único símbolo). Se você estiver usando o ADO, use o sinal de porcentagem (e sublinhado).

Você pode achar isso útil:

http://msdn.microsoft.com/en-us/library/aa140104(office.10).aspx

Na grade de design de consulta e com DAO você usa *, com ADO e ASP, você usa%

Acessando o Jet via ODBC, não está claro para mim quais curingas devem ser usados. Eu suponho que o Jet SQL natural (* /?), Mas desde que eu nunca use dados do Jet via ODBC eu não posso dizer.

No Access, como diz o artigo Remou cites, no código, depende de qual interface de access a dados você usa – ADO (que ninguém deveria estar usando de dentro do Access), você usa% / _, enquanto com DAO (camada de interface nativa do Jet ), você usa curingas nativos do Jet (* /?).

Há uma exceção em versões posteriores do Access que executam o SQL no Access. Eu não sei se foi Access 2002 ou 2003 que adicionou, mas hoje em dia, há um modo de compatibilidade ANSI SQL 92 que você pode ativar. Se você fizer isso, os curingas se tornarão% / _ em vez de * /? Mas ser capaz de escolher o modo ANSI aplica-se somente ao próprio Access – como uma vez que nos informou, você tem que escolher diferentes bibliotecas de interface de dados para usar os diferentes modos SQL, com ADO usando o 92 e DAO e ODBC 89.