MYSQL problème de requète [Résolu]

Messages postés
248
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
6 mai 2018
-
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!
Afficher la suite 

3 réponses

Messages postés
248
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
4 mars 2016
5
0
Merci
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...
@+
Commenter la réponse de cs_yanb
Messages postés
248
Date d'inscription
lundi 9 novembre 2009
Statut
Membre
Dernière intervention
6 mai 2018
0
Merci
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
Commenter la réponse de PhilLu
Messages postés
26806
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2019
317
0
Merci
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
jordane45
Messages postés
26806
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 novembre 2019
317 -
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
Commenter la réponse de jordane45