2009-04-05 12 views
12

Quel est le caractère générique multi-caractère approprié dans l'opérateur LIKE dans Microsoft Jet et quel paramètre l'affecte (le cas échéant)? Je supporte une ancienne application ASP qui fonctionne sur Microsoft Jet (sur une base de données Access) et utilise le symbole% dans l'opérateur LIKE, mais j'ai un client qui a apparemment des problèmes dans son environnement car le caractère% est compris comme un caractère, et je suppose que son caractère générique de plusieurs caractères est *. Aussi, je suis presque sûr que dans le passé j'ai écrit une application avec des requêtes en utilisant * au lieu de%. Enfin, Microsoft Access (en tant qu'application) fonctionne également uniquement avec * et non% (mais je ne suis pas sûr de sa pertinence).Caractères génériques Microsoft Jet: astérisque ou signe de pourcentage?

Je viens de passer environ 20 minutes de recherche Internet sans aucun résultat utile, et donc je pensais que ce serait utile demander sur stackoverflow. Quelqu'un peut déjà le savoir, et il est préférable de garder les réponses potentielles sur stackoverflow que n'importe quel autre forum de discussion aléatoire de toute façon.

Répondre

14

La réponse est que le comportement des caractères génériques dépend du mode de requête ANSI de l'interface utilisée. Le mode de requête ANSI-89 ('mode traditionnel') utilise le caractère *, le mode de requête ANSI-92 ('mode de compatibilité SQL Server') utilise le caractère %. Ces modes sont spécifiques à ACE/Jet et ne portent qu'une ressemblance passagère avec les normes ANSI/ISO SQL-89 et SQL-92. Interface

L'ADO (OLE DB) utilise toujours le mode de requête ANSI-92.

L'interface DAO utilise toujours le mode de requête ANSI-89.

Lorsque vous utilisez ODBC le mode de requête peut être spécifié explicitement par le drapeau ExtendedAnsiSQL. L'interface utilisateur MS Access, à partir de la version 2003, peut utiliser l'un ou l'autre mode de requête, donc ne supposez pas qu'il s'agit de l'un ou de l'autre à un moment donné (par exemple, n'utilisez pas de caractères génériques spécifiques au mode de requête). Règles de validation).

ACE/Jet syntaxe SQL a un mot-clé ALIKE, qui permet aux ANSI-92 caractères mode de requête (% et _) quel que soit le mode d'interrogation de l'interface, mais présente l'inconvénient légère du mot-clé ALIKE ne pas être SQL- 92 (cependant, ALIKE reste très portable). Le principal inconvénient, cependant, est que je comprends le mot-clé ALIKE n'est pas officiellement pris en charge (même si je ne peux pas imaginer qu'il disparaîtra ou aura modifié le comportement de sitôt).

4

Si vous utilisez DAO, astérisque utilisation (et point d'interrogation pour espace réservé symbole unique). Si vous utilisez ADO, utilisez le signe pourcentage (et le trait de soulignement).

2

Accès Jet via ODBC, ce n'est pas clair à moi quelles wildcards devraient être utilisées. Je supposerais les jet SQL naturels (* /?), Mais puisque je n'utilise jamais de données Jet via ODBC je ne peux pas dire. Dans Access, comme le dit l'article de Remou, le code dépend de l'interface d'accès aux données que vous utilisez - ADO (que personne ne devrait utiliser depuis Access), vous utilisez%/_, tandis que DAO (Couche d'interface native de Jet), vous utilisez les caractères génériques natifs de Jet (* /?).

Il existe une exception dans les versions ultérieures d'Access exécutant SQL dans Access. Je ne sais pas si c'est Access 2002 ou 2003 qui l'a ajouté, mais de nos jours, il y a un mode de compatibilité ANSI SQL 92 que vous pouvez activer. Si vous faites cela, les caractères génériques deviennent%/_ au lieu de */?. Mais être en mesure de choisir le mode ANSI applique uniquement dans Access lui-même - que onedaywhen nous a fait savoir, vous devez choisir les bibliothèques d'interface de données différentes pour utiliser les différents modes SQL, avec ADO en utilisant les 92 et DAO et ODBC 89.

+0

ACE/Jet possède * deux * ensembles de caractères génériques natifs: un ensemble natif pour le mode de requête ANSI-89 et un autre ensemble natif pour le mode de requête ANSI-92. Ces modes de requête, natifs du moteur, ne s'appliquent pas "uniquement dans Access lui-même". – onedaywhen

+0

Comment définir le mode ANSI lors de l'exécution de SQL par rapport à Jet? Je ne sais vraiment pas, car je n'utilise jamais Jet sauf à travers Access lui-même. –

+0

BTW, je vais modifier mon message pour refléter votre réponse. –

Questions connexes