Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#3

AW: create.execsql error -104 Token unknown

  Alt 22. Mär 2017, 12:21
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.
  Mit Zitat antworten Zitat