Bonjour,
Je travaille avec Delphi 7 et SQL Server 2016.
J'ai besoin de faire un update dans ma base de données en passant par une sous-requête.
Les données étant saisies par un utilisateur, je voulais utiliser des paramètres.
J'ai donc écrit le code suivant :
La ligne qsql.ExecSQL me renvoie l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 var qsql: TSQLQuery; begin // ... try qsql.SQL.Add('UPDATE dossier SET my_date = :pdate '); qsql.SQL.Add('WHERE id IN '); qsql.SQL.Add('('); qsql.SQL.Add(' SELECT TOP 1 id '); qsql.SQL.Add(' FROM dossier d '); qsql.SQL.Add(' INNER JOIN table1 t1 on d.id = t1.id_dossier '); qsql.SQL.Add(' INNER JOIN table2 t2 on t1.id = t2.id_t1 '); qsql.SQL.Add(' WHERE t2.numero = :pnumero '); qsql.SQL.Add(');'); qsql.ParamByName('pdate').AsDateTime := aDate; qsql.ParamByName('pnumero').AsString := Trim(numero); qsql.ExecSQL finally FreeAndNil(qsql); end;
SQL state: 42000, SQL Error Code: 0
Les informations de paramètre ne peuvent provenir
d'instruction SQL avec des requêtes de sous-sélection.
Définissez les informations de paramètre avant de préparer la
commande.
La requête seule fonctionne sans erreurs quand je l'écrit directement dans SQL Server.
Savez-vous si il y a un autre moyen de faire fonctionner ma requête ?
Sinon, je devrais faire un select pour récupérer l'id avant de faire mon update, mais cela doublerais alors le nombre de requêtes.
Merci de vos commentaires.
Partager