OVH Cloud OVH Cloud

Opérateur Logique ?

15 réponses
Avatar
Driss HANIB
Bonjour à tous,

Pour des raisons de commodité sur un document apparaissent plusieurs
'personnes' en en tête.
Les personnes présentes en entête peuvent varier d'un document à l'autre. Et
je dois garder ces personnes pour réimprimer le document si besoin.

Les données sont stockées dans une base Access
Chaque personne est identifiée par un numéro interne 'auto incrémenté' donc
unique.
Dans l'enregistrement définissant le document j'ai mis un champ de type
entier long qui aura un nombre ('donc !) qui est la somme des puisssance de
2 avec comme indice les numéro interne des personnes présentes :

il est de la forme N = 2^1 + 2^3 + 2^4 + 2^n..

Ce nombre est donc utilisable pour récupérer d'après ce je comprends par les
opérateurs logiques les différents numeros internes utilisés.

Seulement n'ayant pas étudié de manière correcte l'utilisation des
opérateurs, quelqu'un peut il m'aider pour vérifier la présence ou non d'un
numéro interne

partons en prenant comme exemple

S = somme
N = num interne..

merci

Driss

5 réponses

1 2
Avatar
Driss HANIB
Salut Fred
Ta base est sur une disquette ? ;-)


Non mais disons que j'essaie d'optimiser au maximum


Oui, j'aurais pensé à cela également, j'aime bien quand c'est lisible.
Une solution purement base de données serait d'établir une table
supplémentaire de liens. Mais est-ce utile ? Toi seul le sais !



En fait ce sont des ordonnances sur l'entête desquelles il y a la liste des
prescripteurs du cabinet (vétérinaire).
J'ai donc créé un BDD qui comprend le destinaitaire, les médicaments, les
doses etc.
je veux pouvoir ressortir des duplicatas.donc en pilotant Printer, je recrée
l'entête de l'ordonnance avec le nom des prescripteurs.
je dois reproduire à l'identique par rapport à l'originale
Or, pour différente raison, aucours du temps l'équipe se modifie : départs,
arrivées..
le nom des prescripteurs présents va varier par période : je dois donc ,
lors du duplicata savoir qui était présent à ce moment là et donc n'imprimer
que ceux là

Voilà le pourquoi

Driss
Avatar
Driss HANIB
Merci François,

toutes ces explications vont me servir
Comme toujours, je suis très friand de tes explications
Merci encore
tu peux voir dans le premier post de fred (ou plutot ma réponse) l'objet
final de ma demande

Driss
"Picalausa François" a écrit dans le message de
news:
Hello,

Avec cette technique, il faut faire attention aux dépassements de


capacités
qui surviennent très vite
(ln(Max Variable)/ln(2) entrées au maximum - où ln est le log népérien;


log
sous VB - ce qui revient à log en base 2...)

Ensuite, il suffit de tester à coup de And et d'ajouter à coup de Or:
(2^4 Or 2^7)
Correspond au utilisateurs 4 et 7

On voit celà par représentation binaire (utiliser une police à pas fixe):
00001000
Or 00000001
------------
00001001


A noter que les indices commencent à 0 et non à 1 (2^0 = 1, 2^1 = 2)
De même:
(2^4 Or 2^7 Or 2^1 Or 2^5)
Correspond au utilisateurs 1, 4, 5, 7

On effectue alors les comparaisons avec And:
If (((2^4 Or 2^7) And (2^5)) = 2^5) Then
Correspond à "l'utilisteur 5 est-il contenu dans la liste d'utilisateurs


4,
7".

En fonction des langages, puisque false =0 et true = différent de 0 on
abrège parfois ce test:
If ((2^4 Or 2^7) And (2^5)) Then

La représentation est la suivante:
00001001
And 00000100
-------------
00000000

Pour 4 And 4,7:
If (((2^4 Or 2^7) And (2^4)) = 2^4) Then
00001001
And 00001000
-------------
00001000

Pour vérifier quellques entrées sont présentes dans la liste, on peut
employer les puissances de deux calculées à la suite:
Exp2 = 1

'MAX-1 pour éviter le dépassement de capacité sur Exp2
For i = 1 to MAX-1
If Champ And Exp2 Then
Debug.Print i; 'Affiche le numéro d'utilisateur
End If
Exp2 = Exp2 * 2
Next i

If Champ And Exp2 Then
Debug.Print i;
End If

--
Picalausa François

"Driss HANIB" a écrit dans le message de news:
u2US48$
> Dans l'enregistrement définissant le document j'ai mis un champ de type
> entier long qui aura un nombre ('donc !) qui est la somme des puisssance
> de
> 2 avec comme indice les numéro interne des personnes présentes :
>
> il est de la forme N = 2^1 + 2^3 + 2^4 + 2^n..
>
> Ce nombre est donc utilisable pour récupérer d'après ce je comprends par
> les
> opérateurs logiques les différents numeros internes utilisés.




Avatar
Driss HANIB
je réponds à cette partie
pour la table de liens c'est effectivement une hypothèse que j'avais
envisagée,
je l'utilise d'ailleurs à d'autres occasions : ici , dans un premier temps
je ne l'ai pas retenue pour déjà 2 raisons
1. a priori je n'ai pas besoin de requêter sur le noms des personnes
rattachée à cette ordonnance
C'est juste une fonction liée à un programme
2. En moyenne nous faisons 900 à 1000 orodnnances par mois avec 6 à 7
personnes / ordonnances
la table va grandir de manière importante rapidement..

Bien sur j'ai le temps de voir venir pour atteindre des problèmes, mais
bon..
A suivre

Driss

"Fred" a écrit dans le message de
news:
dans : news:,
Driss HANIB écrivait :

> je souhaite pour l'instant utiliser le moins de place

Ta base est sur une disquette ? ;-)

> j'avais pensé égalmenent à créer un chaine de caractères avec les
> numéros et un séparateur en 'jouant' avec Join et Split

Oui, j'aurais pensé à cela également, j'aime bien quand c'est lisible.
Une solution purement base de données serait d'établir une table
supplémentaire de liens. Mais est-ce utile ? Toi seul le sais !

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT



Avatar
Fred
Dans : news:e$,
Driss HANIB disait :
Salut Fred



Salut Driss

En fait ce sont des ordonnances sur l'entête desquelles il y a la
liste des prescripteurs du cabinet (vétérinaire).
J'ai donc créé un BDD qui comprend le destinaitaire, les médicaments,
les doses etc.
je veux pouvoir ressortir des duplicatas.donc en pilotant Printer, je
recrée l'entête de l'ordonnance avec le nom des prescripteurs.
je dois reproduire à l'identique par rapport à l'originale



OK, et comme tu l'as mentionné dans ton autre post, il n'y a pas de
requêtes à faire.

Or, pour différente raison, aucours du temps l'équipe se modifie :
départs, arrivées..
le nom des prescripteurs présents va varier par période : je dois
donc , lors du duplicata savoir qui était présent à ce moment là et
donc n'imprimer que ceux là



Compte tenu de ce que tu expliques et avec le système binaire, un
prescripteur qui s'en va ne libère pas son numéro. Tu auras toujours
assez de 31 dans ce cas ?

--
Fred
mail : foleide at free.fr
Avatar
Driss HANIB
oui car les prescripteurs présents sont en général pour très longtemps : il
y a peu de mouvement
Driss
"Fred" a écrit dans le message de
news:
Dans : news:e$,
Driss HANIB disait :
> Salut Fred

Salut Driss

> En fait ce sont des ordonnances sur l'entête desquelles il y a la
> liste des prescripteurs du cabinet (vétérinaire).
> J'ai donc créé un BDD qui comprend le destinaitaire, les médicaments,
> les doses etc.
> je veux pouvoir ressortir des duplicatas.donc en pilotant Printer, je
> recrée l'entête de l'ordonnance avec le nom des prescripteurs.
> je dois reproduire à l'identique par rapport à l'originale

OK, et comme tu l'as mentionné dans ton autre post, il n'y a pas de
requêtes à faire.

> Or, pour différente raison, aucours du temps l'équipe se modifie :
> départs, arrivées..
> le nom des prescripteurs présents va varier par période : je dois
> donc , lors du duplicata savoir qui était présent à ce moment là et
> donc n'imprimer que ceux là

Compte tenu de ce que tu expliques et avec le système binaire, un
prescripteur qui s'en va ne libère pas son numéro. Tu auras toujours
assez de 31 dans ce cas ?

--
Fred
mail : foleide at free.fr



1 2