cs_juan
Messages postés10Date d'inscriptionmardi 17 octobre 2000StatutMembreDernière intervention22 mai 2002
-
30 avril 2002 à 15:59
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 2006
-
30 avril 2002 à 19:37
bjour tous
je fais tout un chemin de sélection sur une base de données, en utilisant des requêtes paramétrées afin de pouvoir emprunter plusieurs chemins de sélection differents, adaptés aux choix de l'utilisateur....
arrivé à la définition des résultats, je crée un vecteur dans lequel je rentre toutes les valeurs initiales de mes paramètres (qui au besoin resteront inchangées), et je voudrais pour afficher chaque étape de ma sélection, remplacer progressivement ces valeurs initiales par les valeurs que mon programme affecte aux paramêtres: j'aboutis à ce genre de déclaration:
sqltxt := 'SELECT * FROM gene2 WHERE ((Type NOT LIKE ''' + DataModule1.Query1.Params[0].AsString+ ''') AND (Type NOT LIKE '''+ DataModule1.Query1.Params[1].AsString+ ''') AND (Type NOT LIKE ''' +DataModule1.Query1.Params[2].AsString+ ''')) AND (Type LIKE ''' +vectinit[3]+ ''') AND ((Materiau LIKE ''' + vectinit[4] + ''') ...
DataModule1.Query1.Active := False;
DataModule1.Query1.SQL.Clear;
DataModule1.Query1.SQL.Add(sqltxt + ' ORDER BY Fabricant');
DataModule1.Query1.Active := True;
c'est à dire que j'assigne les valeurs de paramètres à mes trois premiers paramètres, et que je laisse les valeurs initiales des autres, contenues dans le vecteur "vectinit"... cette syntaxe marche lorsque je ne reprends que les valeurs initiales ou que les valeurs assignées, mais je n'arrive pas à n'assigner que certains paramètres par cette syntaxe, sans avoir l'erreur "indice de ligne hors limite"...
une solution ?
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 30 avril 2002 à 19:37
Parce que tu te trompe dans l'utilisation des paramètres dans une requète SQL. La requète doit être :
sqltxt := 'SELECT * FROM gene2 WHERE ((Type NOT LIKE :Param1 ) AND (Type NOT LIKE :Param2 ) AND (Type NOT :Param3 )) AND (Type LIKE ''' +vectinit[3]+ ''') AND ((Materiau LIKE ''' + vectinit[4] + ''')
Car tu ne peut utiliser Params[] tant que les paramètres ne sont pas défini d'ou ton erreur d'index.
L'utilisation de la requète serait alors :
DataModule1.Query1.Active := False;
DataModule1.Query1.SQL.Clear;
DataModule1.Query1.SQL.Add(sqltxt + ' ORDER BY Fabricant');
DataModule1.Query1.ParamByNamle('Param1').Value:='...';
DataModule1.Query1.ParamByNamle('Param2').Value:='...';
DataModule1.Query1.ParamByNamle('Param3').Value:='...';
DataModule1.Query1.Active := True;
Utilise de préférence ParamByName que Params[] car ParamByName ne dépend pas de l'ordre d'apparation dans la requète.