Question sur les critères de recherche [Résolu]

Messages postés
30
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
18 janvier 2011
- - Dernière réponse : cs_marcotte
Messages postés
30
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
18 janvier 2011
- 18 janv. 2011 à 13:22
Bonsoir les codeurs ;)
SVP quel test logique utilise t'on pour faire en sorte qu'une recherche se fasse en fonction d'un ou plusieurs critères ?
Je m'explique je crois^^
J'ai 4 champs de saisie pour les critères, je veux pouvoir utiliser l'un des critères seul pour une recherche ou bien un ensemble de plusieurs critères parmi les 4 possibles (style le premier + le troisième par exemple)
Quel le test à utiliser ?
Par exemple pour une recherche avec l'ensemble des citères ça serait ça :
If critère1 and critère2 and critère3 and critere4 then
begin
....
end;

Mais pour une recherche avec seulement le deuxieme et le quatrieme je sais pas faire, vu que les champs vides vont interférer dans le problème.
Comment dire à mon programme de recherche que je veux seulement les critères choisis (ceux dont les champs sont pleins quoi.

marcotte
Amateur passionné de programmation jeux vidéos 2D et texte (0D ? lol)
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
3
Merci
Bonjour
voila peut être un début de solution
1) d'abord créer une fonction pour simplifier :
function IIF(condition:boolean; V:integer) : integer;
   begin
  result := 0;
   if condition then result:=V;
   end;



tu déclares une varaiable TEST
TEST : integer;

ensuite dans l'analyse des critères tu fais :
TEST := iif(critere1,1) + iif(critere2,2) + iif(critere3,4) + iif(critere4,8) .....

en suivant la suite 1,2,4,8,16,32 ...

ensuite il ne reste plus qu'a lancer un case !
case of TEST
 //  0 : rien : pas de critère satisfait
1: exe1; // critère 1
2: exe2; // critère 2
3; exe3; // critères 1 et 2    (3 = 1+2)
4: exe4; // critère 3
5: exe5; // critère 1 et 3     (5 = 1+4)
6: exe5; // critère 2 et 3     (6 = 2+4)
7: exe5; // critère 1, 2 et 3  (7 = 1+2+4)
.....  etc c'est du binaire pur

end;



Dubois77

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dubois77
Messages postés
248
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
4 mars 2016
5
3
Merci
Salut,
l'exemple de Dubois est parfaitement correcte,
mais je préfére l'utiliser comme ceci, pour des raisons de lisibiliter dans le case,
l'exemple suivant affiche un message indiquant quel composant edit contient du texte (ici 4 edit, 1 bouton)à toi de l'adapter...
function ByteToBin(AValue: Byte): string;
var
    I : Integer;
begin
    I := 4;
    Result := '0000';
    repeat
        if Odd(AValue) then
            Result[I] := '1';
        Dec(I);
        AValue := AValue shr 1;
    until AValue = 0;
end;

function EmptyStrByte(AValue : string): Byte;
begin
    if AValue = EmptyStr then
        Result := 0
    else
        Result := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    CRT  : string;
    CR1  : Byte;
    CR2  : Byte;
    CR3  : Byte;
    CR4  : Byte;
begin
    CR1 := EmptyStrByte(Edit1.Text) shl 0;
    CR2 := EmptyStrByte(Edit2.Text) shl 1;
    CR3 := EmptyStrByte(Edit3.Text) shl 2;
    CR4 := EmptyStrByte(Edit4.Text) shl 3;
    CRT := ByteToBin(CR4 + CR3 + CR2 + CR1);
    case StrToInt(CRT) of
        0000 : ShowMessage('Pas de critère');
        0001 : ShowMessage('Edit1');
        0010 : ShowMessage('Edit2');
        0011 : ShowMessage('Edit1 et Edit2');
        0100 : ShowMessage('Edit3');
        0101 : ShowMessage('Edit1 et Edit3');
        0110 : ShowMessage('Edit2 et Edit3');
        0111 : ShowMessage('Edit1 et Edit2 et Edit3');
        1000 : ShowMessage('Edit4');
        1001 : ShowMessage('Edit1 et Edit4');
        1010 : ShowMessage('Edit2 et Edit4');
        1011 : ShowMessage('Edit1 et Edit2 et Edit4');
        1100 : ShowMessage('Edit3 et Edit4');
        1101 : ShowMessage('Edit1 et Edit3 et Edit4');
        1110 : ShowMessage('Edit2 et Edit3 et Edit4');
        1111 : ShowMessage('Edit1 et Edit2 et Edit3 et Edit4');
    end;
end;

@+Yanb

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_yanb
Messages postés
248
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
4 mars 2016
5
3
Merci
resalut,
en relisant les posts tu veux juste utiliser correctement les opérateurs booleens,
ce dont j'ai besoin c'est la façon d'agencer les critères avec des AND et des OR, je ne sais même pas quel opération logique je dois utiliser, est-ce un AND comme j'en ai donné l'exemple dans mon premier post, est-ce un OR, je ne sais pas,

que dire ?!. c'est le béaba, on utilise les règles standard de la logique booléenne.
not (négation), ex : if not A then test => si je n'est pas A alors on fait test
and (conjonction), ex : if A and B then test => si j'ai A et B on fait test
or (disjonction), ex : if A or B then test => si j'ai A ou B ou A et B alors on fait test
xor (disjonction exclusive), ex : if A xor B then test => si j'ai A ou B on fait test
(égal), ex : if A B then test => si A égal B alors on fait test
un autre exemple if ((A+B)> C) and D then test => si A+B supérieur à C et que l'on a D alors on fait test
dans ton exemple de départ si on a critère 2 et 4 et pas 1 et 3 :
if not critère1 and critère2 and not critère3 and critère4 then
begin
...
end;

équivalent à
if not critère1 then
    if critère2 then
        if not critère3 then
            if critère4 then
            begin
            ...
            end;

là je peux pas mieux faire...
après pour plus d'infos sur la logique booléenne et les conditions dans if
regarde dans l'aide de delphi F1 est ton amie...
@+yanb

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_yanb
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
3
Merci
Salut Yanb7
on va laisser Marcotte juger si ton code est vraiment plus lisible que le mien !
par contre ta démo sur le booléen ne peux que l'aider à régler son problème car quand j'utilise "critere1", "critére2", c'est en fait les conditions de son problème réel qu'il doit mettre (que je connais pas franchement, vu sa demande de base
et la ta démo doit lui permettre de 'créer' les "critereX"
sachant bien sur que les 'exe1' exe2' ... de man case doivent être ce qu'il veut faire suivant ses critères
à bientôt
Dubois77

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dubois77
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9
0
Merci
Bonjour,

Merci de fournir plus d'infos (bdd, SQL etc..)
Je suppose qu'il s'agit d'une requête SQL :
si tel est le cas, alors il te faut un moteur de construction de requêtes :

ce n'est pas très difficile à créer..
je ferai d'abord un choix des critères avec des case à cocher (pour 4 cas, c'est adapté..)
une fois ces derniers choisis, l'utilisateur remplit toutes les zones corerspondantes(tests à prévoir sur edit etc)
Ensuite tu construis la requête avec le choix des critères retenus et les valeurs saisies.
il est possible aussi d'écrire des morceaux de SQL et de les assembler..

cantador
Commenter la réponse de cs_cantador
Messages postés
30
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
18 janvier 2011
0
Merci
Merci de me répondre ;)
Il s'agit juste de chercher dans un fichier, vois ça comme une liste d'enregistrements.
Il ne sagit pas de base de données classique comme paradox ou mysql, mais la base de données importe peu en fait, ce dont j'ai besoin c'est la façon d'agencer les critères avec des AND et des OR, je ne sais même pas quel opération logique je dois utiliser, est-ce un AND comme j'en ai donné l'exemple dans mon premier post, est-ce un OR, je ne sais pas, ce que je recherche c'est l'algorithme pas les instructions.
Merci ;)


marcotte
Amateur passionné de programmation jeux vidéos 2D et texte (0D ? lol)
Commenter la réponse de cs_marcotte
Messages postés
30
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
18 janvier 2011
0
Merci
Salut ;)
Je vous remercie beaucoup de votre aide, j'étais un peu coincé dans mon programme à cause de ça et vous m'avez super aidé et de plus j'ai appris grace à vous quelques trucs bien sympas ^^

J'étais très occupé ces temps-ci, donc désolé si je n'ai pas répondu de suite, en tous cas, je vous suis très reconnaissant les gars ;)

marcotte
Amateur passionné de programmation jeux vidéos 2D et texte (0D ? lol)
Commenter la réponse de cs_marcotte