2017-12-22 23 views
0

Mit dbExpress TSQLQuery, ich kann nicht eine Abfrage mit ausführen Block-Befehl ausführen, da dieser Befehl ? Notation für Parameter erfordert, und Delphi verwendet : für Parameter, dann, wenn im Körper des Blocks Variablen erstellt und verwendet sie alsWie kann ich Firebird Execute Block mit Delphi TSQLQuery verwenden?

select data from table where .... into :var; 

dass ": var" als Parameter von TSQLQuery interpretiert wird.

Wie kann man eine Anweisung zum Ausführen von Anweisungen mit Delphi ausführen?

Wenn ich schreiben:

execute block(param1 char(1)=:param1) 

ich einen Wert für laden kann: param1 von Delphi, aber wenn ich es ausführen mit Query.Open oder Query.ExecSQL einen Fehler zurückgibt, so Abwesenheit von Parameter anzeigt? denn in Firebird wird der Ausführungsblock geschrieben:

execute block(param1 char(1)=?param1) 

Gibt es eine Möglichkeit, dies mit TSQLQuery zu lösen?

+1

@MartynA Diese Frage scheint mit diesem Problem nicht verwandt zu sein. –

+0

@MarkRotteveel: Mein Fehler - irgendwo in letzter Zeit habe ich etwas über dieses Problem geschrieben, ich dachte, es war die Seite, die ich zitiert habe, aber anscheinend nicht. – MartynA

Antwort

0

": var" wird als Parameter von TSQLQuery interpretiert

Sie können, dass durch Einstellen der ParamCheck Eigenschaft auf False auszuschalten.

+0

ParamCheck ist falsch. wenn ich execute block (Use_Code char (1) =: Use_Code, plus char (2) =: plus, fromclass int =: ausklasse, f1 timestamp =: f1, f2 timestamp =: f2, prov int =: prov) returns (texto varchar (4096)) als deklariere Variable nom varchar (50); deklarieren Variable Sucu Integer; beginne wähle etwas von etwas wo prov =: prov in: nom; wählen Sie eine andere aus anothertable, wobei class =: fromclass und datecolumn zwischen: f1 und: f2 in: sucu; Ende Wenn Query1.Open oder ExecSQL: Löst die Ausnahmeklasse TBXError mit der Nachricht 'Token unbekannt, Zeile x Spalte y?'. – NizamUlMulk

+0

@NizamUlMulk diese Art von Informationen gehört zu Ihrer Frage, nicht in einem Kommentar. Bitte bearbeiten Sie Ihre Frage –

0

der einzige Weg, der für mich arbeitete, war nicht setzen ":" für interne vars im Block. Bsp. select data from table into var; und das ist Arbeit !, dann, da dies ein Block ist, bewerten Sie die Var mit einem Wenn!

if (var = 1) 
    do something; 
else 
    do anotherthing; 

und gelöst Geschäft!

Verwandte Themen