anil16
Messages postés47Date d'inscriptionvendredi 15 février 2008StatutMembreDernière intervention15 février 2010
-
7 nov. 2009 à 23:03
anil16
Messages postés47Date d'inscriptionvendredi 15 février 2008StatutMembreDernière intervention15 février 2010
-
8 nov. 2009 à 12:09
Bonsoir,
Je n'arrive pas à faire fonctionner cette requête,qui deverait selectionner d'une table les enregistrements dont le num_bl figure dans un memo et afficher le résultat dans une dbgrid voici mon code:
var i,z: integer;
begin
z:=Memo1.Lines.Count;
ADOQuery2.SQL.Clear;
for i:=0 to z-1 do
begin
ADOQuery2.SQL.Add('select * from detail_bl where num_bl=' +
(Memo1.Lines[i]));
ADOQuery2.Open;
end;
end.
le message d'erreur est:
'erreur de syntaxe. dans l'expression 'num_bl=13 select* from detail_bl where num_bl=100''....
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 8 nov. 2009 à 10:28
Mets un point de débogage sur la ligne :
ADOQuery2.Open;
Et, à chaque arrêt du débogueur sur cette ligne, examine la propriété AdoQuery2.Sql.Text.
Au premier tour, tu verras :
select * from detail_bl where num_bl=xxx
puis, au deuxième passage :
select * from detail_bl where num_bl=xxxselect * from detail_bl where num_bl=yyy
etc, etc.
Mais, je pense que ce n'était pas ton intention et que ce ue tu souhaitais faire est un requête du type : sélectionner tous les enregistrements dont le champ num_bl vaut xxx, yyy, ....
Dans ce cas ta requête devient :
select * from detail_bl where num_bl IN (xxx, yyy, ...);
Alors, puisque tes valeurs sont stockées dans un composant TMemo, il suffit de récupérer les valeurs concaténées en les séparant par des virgules. La propriété Lines (de type TStrings) de ton composant TMemo possède une propriété CommaText (Enumère les chaînes de l'objet TStrings en utilisant le format de données système (SDF)).
Ainsi, le code source se simplifie :
begin
if Memo1.Lines.Count > 0 then
with ADOQuery2 do
begin
SQL.Clear;
SQL.Add(
'SELECT * FROM detail_bl WHERE num_bl IN (' + Memo1.Lines.CommaText + ')');
Open;
end;
end;
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 7 nov. 2009 à 23:20
A chaque passage dans la boucle tu concatènes les différentes requêtes en utilisant la méthode Add !
Soit tu réinitialises la propriété Sql.Text avant l'appel à la méthode ADD, soit tu affectes directement la propriété Text de AdoQuery2.Sql.
anil16
Messages postés47Date d'inscriptionvendredi 15 février 2008StatutMembreDernière intervention15 février 2010 7 nov. 2009 à 23:37
Merci delphiprog, j'avoue que j'ai pas bien compris comment faire cette concaténation et quand je réinitialise sql.text ça m'affiche que les enregistrements dont num_bl = dernière ligne de memo, je suis certaine que j'ai mal appliqué ce que tu m'as demandé de faire
Vous n’avez pas trouvé la réponse que vous recherchez ?