ca marche pour certains cas mais pas pour d'autres, ta routine est tres asticieuse mais excuser moi, je n'arrive ps à l'implanter
ca marche pour certains cas mais pas pour d'autres, ta routine est tres asticieuse mais excuser moi, je n'arrive ps à l'implanter
A la Recherche du Parfait il faut faire et refaire
L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.
j'imagine que les listbox correspondent à des index dans une table secondaire non ?
dans ce cas il faut pas utiliser le code proposé mais un dérivé pour un entier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 var sep:string; procedure AddField(const Value,FieldName:string); begin if Value='' then exit; SQL.Add(sep+FieldName+' LIKE "%'+SqlEncode(Value)+'%"'); sep:=' AND '; end; procedure AddIndex(Value:integer; const FieldName:string); begin if Value<0 then exit; SQL.Add(sep+FieldName+'='+IntToStr(Value)); sep:=' AND '; end; begin SQL.Text:='SELECT * FROM Table'; sep:=' WHERE '; AddField(Edit1.Text,'Champ1'); AddField(Edit2.Text,'Champ2'); AddField(Edit3.Text,'Champ3'); AddIndex(ComboBox1.ItemIndex,'Champ4'); end;
Voilà un cas concret ou ca ne marche pas
A la Recherche du Parfait il faut faire et refaire
L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.
oui c'est exactement ce dont je parle juste un avant...le champ fonction ne serait-il pas un entier contenant un code fonction au lieu du libellé ?
si ce n'est pas le cas, c'est que la base est mal conçue
les champs sont tous des VARChar, sauf pour Matricule int(11) . Ma table est tout ce qui y a de plus simple.
A la Recherche du Parfait il faut faire et refaire
L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.
Dans le message d'erreur de la requête
il manque le mot clé "WHERE" à la place du "AND"...
salut
regade bien le code que paul ta fournie
le premier sep etait where et une foi passé dans la condition
la variable sep passe a and
j'avou que je ne l'aurai pas fait ainsi mais sa demarche est assez clair
@+ Phil
Blaise PascalNous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
PS : n'oubliez pas le tag
justement il est très claire et très logique, mais le fait de passer au AND directement des que je rempli plusieurs Edit en meme temps : nom := 'Quelque chose' et Matricule := 'Quelque chose' j'ai ce message d'erreur. J'avoue que je suis mal barré comme ça
A la Recherche du Parfait il faut faire et refaire
L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.
Blaise PascalNous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
PS : n'oubliez pas le tag
J'ai aucun problème quant je fais un seul de critère de recherche, mais dès que je mets plusieurs ca ne marche plus pour certaines combinaisons, j'ai les boules
A la Recherche du Parfait il faut faire et refaire
L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.
Oui c'est vrai, le voici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 procedure AddField(const Value,FieldName:string); begin if Value='' then exit; dm.tbPersonne.SQL.Add(sql+sep+FieldName+' LIKE "%'+SqlEncode(Value)+'%"'); sep:=' AND '; end; procedure TfMenu.bGoClick(Sender: TObject); begin dm.tbPersonne.Close; dm.tbPersonne.SQL.Clear; sql := '';sep:=''; sql:='SELECT * FROM personne'; sep:=' WHERE '; AddField(eNom.Text,'nom'); AddField(eMatricule.Text,'matricule'); AddField(cbService.Text,'service'); AddField(cbFonction.Text,'fonction'); AddField(eCin.Text,'cin'); AddField(eEtat.Text,'etat'); AddField(eType.Text,'tenue_civile'); dm.tbPersonne.Open; lTotal.Caption := IntToStr(dm.tbPersonne.RecordCount); end;
A la Recherche du Parfait il faut faire et refaire
L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.
je suis sur qu'il y a qlq chose de tres banal qui m'échappe, mais c quoi j'arrive toujours pas à le detecter
A la Recherche du Parfait il faut faire et refaire
L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.
ARGH !
déjà, il faut utiliser les balises CODE pour le code
ensuite tu as fait un gros mélange des genres !
soit tu utilises la variable "sql:string" soit tu utilise "SQL.Add()" mais pas le deux !
tel que tu écris ton code tu vas te retrouver avec une requête
pour détecter ce genre d'erreur, il suffit d'ajouter un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2'SELECT * FROM Personne WHERE nom LIKE "%TOTH%" AND SELECT * FORM Personne AND matricule LIKE "%1234%"'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ShowMessage(dm.tbPersonne.SQL.Text);
quelle balise dois je mettre?
justement je voudrais utiliser sql comme tu m'as envoyé ds le source. Mais je n'ai ps réussi à l'integrer ds mon SQL Command pour pouvoir l'executer.
Corrigez moi le source que je vous ai envoyé, parceque moi je suis saturé à force d'y réflechir
Merci beaucoup d'avance
A la Recherche du Parfait il faut faire et refaire
L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.
Pour ma part je ferais plus dans ce style
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 var lst : TStringList; i : integer; sChamp,sValue : String; begin lst := TStringList.Create; try if eNom.Text <> '' then lst.Add('nom=' + eNom.Text; if cbService.Text <> '' then lst.add('service=' + cbService.Text; if cbFonction.Text <> '' then lst.Add('function=' + cbFonction.Text); if eMatricule.Text <> '' then lst.Add('matricule=' + eMatricule.Text); // Etc ... pour les champs with dm.tbPersonne do begin Close; SQL.Clear; SQL.Add('Select * from personne'); if lst.Count > 0 then SQL.Add('where'); for i := 0 to lst.Count -1 do begin sChamps := lst.Names[i]; sValue := lst.Value[sChamp]; SQL.Add(sChamps ' LIKE ' + QuotedStr('%' + sValue + '%')); if i <> lst.count -1 then SQL.Add('And'); end; SQL.Add('order by nom'); // sauvegarde de la requete dans un fichier texte pour voir à quoi elle ressemble SQL.SaveToFile('Marequetetest.txt'); Open; end; finally lst.free; end;
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
merci beaucoup Rayek, je vais tester cette routine, et je vous tiens au courant
A la Recherche du Parfait il faut faire et refaire
L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.
je vous remercie tous pour votre support, le resultat est tres satisfaisant
Merci mille fois
A la Recherche du Parfait il faut faire et refaire
L'homme sage apprend de ses erreurs. L'homme encore plus sage apprend des erreurs des autres.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager