Wenn man aus dem Delphi-Quelltext heraus eine
SQL-Abfrage macht, so beginnen Parameter mit :
Diese müssen vor dem Ausführen des
SQL gefüllt werden.
Beispiel:
Delphi-Quellcode:
Query.SQL.Text := '
select * from tabelle where spalte = :wert';
Query.Params[0].AsString := '
zu suchender Inhalt';
// oder
Query.ParamByName('
wert').AsString := '
zu suchender Inhalt';
Query.Open;
Das Problem hier ist nun, dass Dein
SQL den : enthält, dieser hier aber nicht als Beginn eines Parameters dienen soll.
Wenn ich mit FireBird arbeite, nutze ich die Zeos-Komponenten.
Die TZQuery hat u. a. die Eigenschaften ParamChar und ParamCheck.
Schau bitte mal, ob es etwas derartiges auch bei Deinen Komponenten gibt.
Am Sinnvollsten wäre es dann, ParamCheck auf False zu setzen. In dem Fall dürfte keine Prüfung auf das Vorhandensein von Parametern stattfinden und das
SQL sollte sich ausführen lassen.
Andernfalls bei ParamChar ein anderes Zeichen eingeben, welches im
SQL nicht vorkommt und dieses dann für die Kennzeichnung von Parametern nutzen.
Methode unelegant, aber eventuell ein "Notnagel":
SQL wie oben und dann:
Delphi-Quellcode:
Query.ParamByName('
MNR').AsString := '
:MNR';
Query.ParamByName('
JID').AsString := '
:JID';
Query.ParamByName('
DID').AsString := '
:DID';
Das aber bitte nur dann probieren, wenn's anders überhauptnicht geht. Es muss nicht unbedingt funktionieren, könnte aber mit ein bisserl Glück.
Mit den Zeos-Komponenten lässt sich eine CREATE PROCEDURE in
Query.SQL.Text mit
Query.ExecSQL problemlos ausführen.
Ein execute block ist dort nicht erforderlich.