Non tu n'as pas compris, tu ne peux plus donner de nom aux paramètres :
req :='select * from commande where datcom > ? ';
Cependant, je viens de vérifier le composant TADOQuery créera les paramètres dans la collection Parameters uniquement si :
- ParamCheck vaut true.
- Le composant TADOQuery est relié à une connexion (propriété Connection, ou ConnectionString définie).
- Les paramètres ont été définit avec la syntaxe ":". Mais attention, si tu utilises deux fois le même nom de paramètre dans la requête, il ne comprendra pas que tu veux utiliser deux fois le même paramètre. Il créera deux paramètres différents, avec le même nom. Ce qui provoquera une erreur. De plus ensuite, le nom du paramètre est remplacé dans la requête par ?, et ADO ne fera le binding entre le paramètre et ça valeur qu'à partir de sa position dans la requête et de sa position dans Parameters.
Si toutes ces conditions sont respectées, les paramètres doivent être créés automatiquement dans Parameters, lorsque tu modifies le contenu de la requête (la collection SQL est modifiée) (Au fait, pas besoin de fermer la requête avant de modifier SQL, sa modification entraîne la fermeture automatique du composant).
Donc ça devrait fonctionner avec :
1 2 3 4 5 6 7
|
q.paramcheck := true;
req :='select * from commande where datcom between :dd1 and :dd2';
q.sql.Text := req;
q.Parameters[0].Value := d1.Date;
q.Parameters[1].Value := d2.Date;
q.open; |
Sinon, tu peux aussi essayer :
1 2 3 4 5 6
|
q.sql.text := req;
q.Parameters.ParseSQL(req, true); // Le parametre true demande la création des TParameter trouvé dans req.
q.Parameters[0].Value := d1.Date;
q.Parameters[1].Value := d2.Date;
q.open; |
Partager