MYSQL problème de requète

Résolu
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021 - Modifié par PhilLu le 25/07/2014 à 00:55
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 - 25 juil. 2014 à 18:25
Je sèche depuis cet après-midi :-/
Je cherche à afficher les données d'une table dans un DBGrid.
En fonction du code, j'obtiens soit toute la table, soit une grille vide :-<
Voici mon code:

procedure TForm1.SelLotChange(Sender: TObject);
begin
// filtrer l'affichage de dbgrid
selLot.Text:=selLot.selText;
SQLConnection_QCVal.connected:=False;
DBAdvgrid_QCVal.ClearAll;
DBAdvgrid_QCVal.UpdateActive;
SQLConnection_QCVal.connected:=False;
SQLDataset_QCVal.CommandText:='select * from qc_val where QCLot = '''+selLot.selText+''' ';
SQLConnection_QCVal.connected:=True;
ClientDataSet_QCVal.Active:=False;
ClientDataSet_QCVal.Active:=True;
DBAdvgrid_QCVal.Update;
selLot.selText:='';
end;
avec la variante qui m'affiche tout:
SQLDataset_QCVal.CommandText:='select * from qc_val where QCLot = '''+'%'+selLot.selText+''' ';
et avec le code simpliste:
procedure TForm1.SelLotChange(Sender: TObject);
begin
// filtrer l'affichage de dbgrid
ClientDataSet_QCVal.Active:=False;
SQLConnection_QCVal.connected:=False;
SQLDataset_QCVal.CommandText:='select * from qc_val where QCLot like ''33501103''';
SQLConnection_QCVal.connected:=True;
end;
ne m'affiche rien "Help"
Au plus j'avance, au moins j'y comprend qq chose :(
Merci pour vos suggestions
Merci,d'avance!

3 réponses

cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
25 juil. 2014 à 09:13
Salut,
Il me semble qu'il faut un ExecSql dans certain cas en fonction du CommandType et de la Connection...F1
Ensuite évite les doubles Quote et prévilégie QuotedStr.
SQLDataset_QCVal.CommandText:='SELECT * FROM qc_val WHERE QCLot LIKE '+QuotedStr(SelLot.SelText);
Les requêtes paramétré sont un peu plus longue à écrire mais évite parfois certain bug avec DB...(Je préfère utiliser les compo ADO)
SQLDataset_QCVal.CommandText:='SELECT * FROM qc_val WHERE QCLot = :PEdSelLot';
SQLDataset_QCVal.ParamByName('PEdSelLot').Value:=SelLot.Seltext;
Ensuite en supposant que c'est une recherche en cours de frappe, j'aurais plus mis...
SQLDataset_QCVal.CommandText:='SELECT * FROM qc_val WHERE QCLot LIKE '+QuotedStr(SelLot.SelText)+'%';
En plus au vu du comportement, il faudrait vérifier ce que donne CommandText en debug pour voir si SelLot.SelText n'est pas Vide...
@+
0
PhilLu Messages postés 251 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 11 mai 2021
25 juil. 2014 à 10:17
En fait SelLot.SelText ne renvoie rien
SelLot est un combobox; j'utilise donc avec succès: sellot.items[sellot.itemIndex]
Voici le code final avec la simplification 'QuotedStr'
procedure TForm1.SelLotChange(Sender: TObject);
begin
// filtrer l'affichage de dbgrid
SQLConnection_QCVal.connected:=False;
ClientDataSet_QCVal.Active:=False;
SQLDataset_QCVal.CommandText:='select * from 'qc_val' where 'QCLot' like '+QuotedStr(sellot.items[sellot.itemIndex]);
ClientDataSet_QCVal.Active:=True;
SQLConnection_QCVal.connected:=True;
end;

1000x merci
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
Modifié par jordane45 le 25/07/2014 à 18:15
Bonjour,

Je pense surtout que tu as un souci de quotes...

'select * from qc_val where QCLot like ''33501103''';


Il faudrait plutot que tu "mixe" avec des guillemets..
'select * from qc_val where QCLot like "33501103" ';


Quand à ta requête qui t'affiche TOUT... comme tu utilises un LIKE % .. j'ai l'impression que ta variable
selLot.selText
est surement vide..
Et donc qu'au final ta requête est en fait comprise comme étant :

select * from qc_val 
where QCLot = "%";


PS : dans celle là aussi tu as un souci de "quotes"....

Je pense que la "bonne" syntaxe serait plutot :

SQLDataset_QCVal.CommandText:='SELECT * FROM qc_val WHERE QCLot LIKE "%' + sellot.items[sellot.itemIndex] +'" ';

Ce qui voudrait dire que tu recherches TOUT ce qui se termine par le contenu de ta variables...
Si tu veux au contraire chercher TOUT ce qui COMMENCE par ta variable il faut mettre le % à la fin...
Et si tu veux chercher TOUT ce qui CONTIENT ta variable.. mettre un % avant et un % après..
comme ceci :
SQLDataset_QCVal.CommandText:='SELECT * FROM qc_val WHERE QCLot LIKE "%' + sellot.items[sellot.itemIndex] +'%" ';


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 344
25 juil. 2014 à 18:25
Je viens de voir en relisant... que tu avais trouvé la réponse à ton problème...
Dans ce cas :


Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
0
Rejoignez-nous