2009-03-27 5 views
2

Je ne fais pas beaucoup de codage avec VB6, mais je suis en train de mettre à jour une application existante et je viens de rencontrer un problème.Demande MS Access: pourquoi LIKE se comporte-t-il différemment lorsqu'il est appelé depuis l'application VB6?

J'ai compris le problème. En VB6, les requêtes doivent utiliser la carte sauvage % lors de l'utilisation COMME, mais dans MS Access, vous devez utiliser le ***** wild card.

J'interroge la même base de données - (c'est dans MS Access).

Lorsque vous interrogez à partir de MS Access, la requête suivante fonctionne:

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

quand je construire cette requête dans VB6, je dois le faire:

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

Qu'est-ce qui se passe? Est-ce normal?

Répondre

5

L'accès utilisé pour avoir sa propre version incompatible de SQL, donc je pense qu'il utilise le * pour des raisons héritées. Lorsque vous utilisez VB6, vous utilisez généralement ODBC et un SQL plus standardisé. Les caractères génériques les plus courants s'appliquent donc. Souvenez-vous que VB6 ne se soucie pas de la base de données que vous utilisez, donc si vous utilisiez autre chose (par exemple, serveur SQL), il ne comprendrait probablement que les signes de pourcentage.

Je suppose que le connecteur Access-ODBC convertit les choses pour vous.

+0

bon point. Tu as probablement raison. – m42

+0

Quand j'étais à l'école secondaire, je travaillais à résoudre les problèmes auxquels les gens avaient accès ou à migrer loin de l'accès. C'est incompatible SQL était l'un des principaux problèmes. – Uri

+0

L'accès n'a pas son propre SQL, mais Jet le fait. Il utilise * et? pour les caractères génériques, alors que la plupart des bases de données utilisent% et _ aux mêmes fins. Si vous utilisez Access 2003 ou plus tard, vous pouvez les configurer pour utiliser le mode ANSI 92, et vous pourrez utiliser% et _ dans Access. –

0

Je n'ai jamais vu le caractère astérisque utilisé comme caractère générique pour une instruction similaire (juste partout ailleurs) - en général, le signe pourcentage est ce que vous auriez besoin d'utiliser.

+0

Il est en fait officielle dans Access http://office.microsoft.com/en-us/access/HP010322531033.aspx Dans l'accès, vous devez l'utiliser, pour autant que je me souvienne. – Uri

+0

en remplaçant * par% dans les résultats d'accès dans 0 enregistrements trouvés. Je suis à peu près sûr que la même chose se produit lorsque vous interrogez la même base de données à partir d'une application vb.net. Je dois toujours utiliser le *. C'est le seul cas que j'ai trouvé avec l'accès où le% fonctionne réellement. mais moi aussi j'ai entendu que% est requis – m42

+0

Non ACCES, mais JET. –

0

Oui, c'est normal.

Je pense que c'est la différence entre DAO (ce que Access utilise en interne), et ADO (ce que VB6 utilise pour parler à Access).

+1

Non, c'est en fait la différence entre le mode de requête ANSI-89 (que DAO utilise toujours) et le mode de requête ANSI-92 (qu'ADO utilise toujours). L'accès peut être utilisé en fonction de ce qui est actuellement défini pour l'interface utilisateur. – onedaywhen

5

L'accès utilisera un sous-ensemble de caractères génériques ANSI-89 par défaut, VB6, la connexion via ADO utilisera ANSI-92.

Operator Comparison

Changing the mode Access uses

+0

En fait, j'aime mieux celui-ci que ma propre réponse (acceptée). – Uri

+0

Pourquoi, merci @Uri ... – cmsjr

+0

il est difficile de choisir une seule réponse. nous avons besoin d'une option pour dire "les réponses suivantes étaient correctes, ET utiles". – m42

1

Je ne sais pas si cela s'applique à VB6, mais dans Access, vous pouvez utiliser

ALIKE '% quelque chose%'

et les caractères% seront traités comme des caractères génériques, que vous utilisiez VBA avec DAO ou ADO ou que vous créiez une requête dans l'éditeur de requête.

+0

Oui, cela s'applique à tout ce qui concerne comment ou quoi est utilisé pour se connecter à ACE/Jet. – onedaywhen

0

Oui, vous pouvez vous en sortir avec ALIKE dans un Jet 4.0 demande OLE DB (c.-à-VB6 utilisant 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 
> 

Bien sûr, vous assurer une compatibilité avec Access mais perdre ANSI SQL-92 compatibilité pour une migration ultérieure vers SQL Server, etc. et finalement faire plus de travail pour vous-même.