Pergunta

O que é o curinga multi-caráter próprio no operador LIKE no Microsoft Jet e o ajuste afeta-lo (se houver)? Eu estou apoiando uma aplicação ASP antigo, que é executado no Microsoft Jet (em um banco de dados Access) e utiliza o símbolo% no operador LIKE, mas eu tenho um cliente que aparentemente tem problemas em seu ambiente, porque o caractere% é entendida como um regular caráter, e eu suponho que seu curinga multi-personagem é *. Além disso, eu tenho quase certeza que no passado eu ter escrito aplicação com consultas usando * em vez de%. Finalmente, Microsoft Access (como um aplicativo) também trabalha apenas com * e não% (mas não tenho certeza quão relevante é).

Eu passei apenas cerca de 20 minutos pesquisando na Internet sem quaisquer resultados úteis, e então eu pensei que seria útil perguntar sobre stackoverflow. Alguém pode já sabe disso, e é melhor para manter as respostas potenciais sobre stackoverflow do que qualquer outro fórum de discussão aleatória de qualquer maneira.

Foi útil?

Solução

A resposta simples é que o comportamento dos caracteres curinga é dependente do ANSI modo de consulta da interface a ser utilizada.

ANSI-89 Modo de consulta ( 'modo tradicional') utiliza o personagem *, ANSI-92 Consulta Mode ( 'modo de compatibilidade SQL Server') usa o personagem %. Estes modos são específicos para ACE / Jet e suportar apenas uma semelhança passageira com o ANSI / ISO SQL-89 e SQL-92 Padrões.

A interface ADO (OLE DB) sempre usa ANSI-92 Consulta Mode.

A interface DAO sempre usa ANSI-89 Modo de consulta.

Ao usar ODBC o modo de consulta pode ser especificada explicitamente através do ExtendedAnsiSQL bandeira.

A interface do usuário MS Access, a partir da versão 2003, pode usar o modo de consulta, por isso não assumir que é um ou outro, em determinado momento (por exemplo, não use caracteres curinga específicas-query-mode em Validação regras).

sintaxe ACE / Jet SQL tem uma palavra-chave ALIKE, que permite que os ANSI-92 caracteres modo de consulta (% e _) independentemente do modo de consulta da interface, no entanto tem a pequena desvantagem da palavra-chave ALIKE não sendo SQL-92 compatíveis (restos no entanto ALIKE altamente portátil). A principal desvantagem, porém, é que eu entendo a palavra-chave ALIKE não é oficialmente suportado (embora eu não posso imaginar que vai desaparecer ou ter comportamento alterado em breve).

Outras dicas

Se você estiver usando DAO, uso asterisco (e ponto de interrogação para o único símbolo espaço reservado). Se você estiver usando ADO, sinal de uso por cento (e sublinhado).

Você pode encontrar este útil:

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

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

Acessando Jet via ODBC, não está claro para mim o que wildcards deve ser usado. Eu diria que os Jet naturais SQL (* /?), Mas desde que eu nunca usar dados Jet via ODBC não posso dizer.

Dentro Access, como o artigo Remou cita diz, em código, isso depende do que o acesso a dados de interface que você usa - ADO (que ninguém deve usar a partir do Access), você usa% / _, enquanto que com DAO (Jet camada de interface nativa), você usar curingas nativas do Jet (* /?).

Há uma exceção em versões posteriores do Access execução SQL dentro do Access. Eu não sei se era Access 2002 ou 2003 que acrescentou ele, mas hoje em dia, há um modo de compatibilidade 92 ANSI SQL que você pode ligar. Se você fizer isso, os wildcards se tornar% / _ em vez de * / ?. Mas ser capaz de escolher o modo ANSI aplica-se apenas dentro de si de acesso - como onedaywhen nos informou, você tem que escolher diferentes bibliotecas de interface de dados para usar os diferentes modos de SQL, com o ADO usando o 92 e DAO e ODBC 89

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top