Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Opérateurs logiques et SQL

4 réponses
Avatar
Bruno LOUIS
Bonjour,

Je souhaite sélectionner un certains nombres d'enregistrements dans une base
de données à partir de la position des bits d'un champ SMALLINT.

j'utilise le fournisseur "Microsoft.Jet.OLEDB.4.0".

A ma connaissance, la meilleure façon de récupérer simplement et rapidement
les données pour lesquels un bit particulier est mis est d'utiliser
l'opérateur logique ET.

A partir de là, 2 hypothèses, soit je demande à VB6 de le faire (on récupère
tous les enregistrement et on les compare un à un), soit je demande à SQL.

je pencherais plutôt pour la deuxième solution, qui, à mon sens, devrait
être beaucoup plus rapide. Le hic c'est que je n'arrive pas à trouver la
syntaxe du ET LOGIQUE sous SQL. Certains sites parle de BITAND, d'autre de
&&, mais cela ne semble pas s'appliquer à la version de SQL que j'utilise.

Quelqu'un aurait-il une idée ?

Merci

4 réponses

Avatar
Jean-marc
Bruno LOUIS wrote:
Bonjour,

Je souhaite sélectionner un certains nombres d'enregistrements dans
une base de données à partir de la position des bits d'un champ
SMALLINT.
j'utilise le fournisseur "Microsoft.Jet.OLEDB.4.0".

A ma connaissance, la meilleure façon de récupérer simplement et
rapidement les données pour lesquels un bit particulier est mis est
d'utiliser l'opérateur logique ET.

A partir de là, 2 hypothèses, soit je demande à VB6 de le faire (on
récupère tous les enregistrement et on les compare un à un), soit je
demande à SQL.
je pencherais plutôt pour la deuxième solution, qui, à mon sens,
devrait être beaucoup plus rapide. Le hic c'est que je n'arrive pas à
trouver la syntaxe du ET LOGIQUE sous SQL. Certains sites parle de
BITAND, d'autre de &&, mais cela ne semble pas s'appliquer à la
version de SQL que j'utilise.
Quelqu'un aurait-il une idée ?



Hello,

Access supporte (Voir RESTRICTION PLUS BAS)
les opérateurs bitwise et utilise une syntaxe
particluière pour ceux-ci : les opérateurs classiques ont été
préfixés avec un "B" comme boolean, et on a donc:
BNOT, BAND, BOR.

Voici des exemples d'utilisation :
http://allenbrowne.com/func-ADO.html#ShowBand

Mais => Ils ne focntionnent QUE AVEC ADO.

A noter que les opérateurs biwise sont très variablement
supportés en fonction des DB : Ils existent sous Oracle, mais
pas toutes les versions. Il n'existe pas directement sous DB2,
mais on peut les implémenter en programmant, etc.

C'est donc un design un peu hasardeux de faire confiance en la
présence ou non du support de ces opérateurs.

Sachant cela, il semblerait assez sage de se rabattre sur ta
première solution : un SELECT aussi restrictif que possible, mais
sans le critère qui nécessite les bits, puis par programmation,
une boucle dans le recordset retourné en testant les bits avec les
opérateurs VB.

Si la taille du recordset n'est pas trop grande (genre qq centaines
de record), ce genre de technique est okay car les fonctions de
parcours de recordset et les bitwise de VB sont très rapides.

Tu trouveras peut etre des précisions supplémentaires sur le groupe
d'utilisateurs Access: microsoft.public.fr.access

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jean-marc
Bruno LOUIS wrote:
Bonjour,
j'utilise le fournisseur "Microsoft.Jet.OLEDB.4.0".

A ma connaissance, la meilleure façon de récupérer simplement et
rapidement les données pour lesquels un bit particulier est mis est
d'utiliser l'opérateur logique ET.

A partir de là, 2 hypothèses, soit je demande à VB6 de le faire (on
récupère tous les enregistrement et on les compare un à un), soit je
demande à SQL.




J'oubliais de mentionner cet article de la FAQ qui
donne des liens vers la documentation de la syntaxe
du SQL Jet :
http://faq.vb.free.fr/index.php?question–


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Bruno LOUIS
Je partirai donc vers une boucle WHILE ... WEND puisque cela semble plus
sage.

Merci, tant pour la rapidité que la précision.

Bruno

"Jean-marc" a écrit dans le message
de news:47528523$0$29263$
Bruno LOUIS wrote:
Bonjour,
j'utilise le fournisseur "Microsoft.Jet.OLEDB.4.0".

A ma connaissance, la meilleure façon de récupérer simplement et
rapidement les données pour lesquels un bit particulier est mis est
d'utiliser l'opérateur logique ET.

A partir de là, 2 hypothèses, soit je demande à VB6 de le faire (on
récupère tous les enregistrement et on les compare un à un), soit je
demande à SQL.




J'oubliais de mentionner cet article de la FAQ qui
donne des liens vers la documentation de la syntaxe
du SQL Jet :
http://faq.vb.free.fr/index.php?question–


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;






Avatar
Jean-marc
Bruno LOUIS wrote:
Je partirai donc vers une boucle WHILE ... WEND puisque cela semble
plus sage.

Merci, tant pour la rapidité que la précision.



Merci pour le retour :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;