Es wurde ja schon gesagt, dass man jeden Parameter nur einmal benützen darf.
Aber zusätzlich ergibt sich noch folgendes Problem:
Die
VCL versucht den CommandText zur Entwicklungszeit zu parsen um die Datentypen und Datenrichtung der Parameter zu ermitteln.
Bei einfachen oder "normalen"
SQL-Abfragen klappt das auch recht gut.
Delphi-Quellcode:
// Beispiel
CommandText := 'SELECT * FROM Tabelle WHERE Status=:Param1';
Die
VCL öffnet die Datenbank im Hintergrund und fragt die Felder der Tabelle ab.
Der Parameter
Param1 bekommt dann den Datentyp (ggf. auch Länge oder Anz. Nachkommstellen) des Feldes
Status verpasst.
Ausserdem erkennt der Parser, dass es sich um einen Input-Parameter handelt.
Bei
SQL-Anweisungen mit mehr als einem Befehl (getrennt durch Strichpunkt) funktioniert der Parser nicht mehr so richtig.
Der Parser erkennt noch die Namen der Parameter aber der Datentyp ist
Unknown.
Und deshalb funktioniert dann auch die Wertübergabe der Parameter nicht.
Eine Stored Proc, wie von NormanG vorgeschlagen, würde dem Parser wieder ermöglichen die Datentypen & Richtungen zu ermitteln.
Man kann aber auch die ADODataset-Komponenten schon zur Entwicklungszeit erstellen und mit dem Objektinspektor die Datentypen der Parameter festlegen.
Oder man legt die Datentypen später per Code fest.
Auf jeden Fall bewegt man sich in schwierigem Gelände wenn man ganze
SQL-Scripts per Parameter versorgen möchte.