2017-12-22 22 views
0

dbExpress TSQLQueryを使用すると、executeブロックコマンドでクエリを実行できません。このコマンドはパラメータの表記が?であり、パラメータとして:が使用され、そのブロックの本文に変数が作成されている場合はDelphi TSQLQueryでFirebirdのExecute Blockを使用するにはどうすればよいですか?

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

":var"はTSQLQueryによってパラメータとして解釈されます。

Delphiでブロック実行文を実行する方法は?

私が書く場合:

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

私の値をロードすることができる:デルファイからPARAM1を、私はそうパラメータが存在しないことを示すQuery.OpenまたはQuery.ExecSQLエラーリターンでそれを実行したとき? Firebirdで実行ブロックが書かれているので:

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

これはTSQLQueryで解決する方法はありますか?

+1

@MartynAこの問題はこの問題とは無関係のようです。 –

+0

@MarkRotteveel:私の間違い - 最近どこかでこの問題について書かれているように見えましたが、引用したページだと思われましたが、明らかにそうではないと思いました。 – MartynA

答えて

0

":varが" あなたがFalseにParamCheckプロパティを設定することで、これをオフにすることができTSQLQueryを

によってパラメータとして解釈されます。

+0

ParamCheckはfalseです。 実行ブロック(Use_Code char(1)=:Use_Code、char(2)=:plus、fromclass int =:fromclass、f1タイムスタンプ=:f1、f2タイムスタンプ=:f2、prov int =:prov)を使用する場合 return(texto varchar(4096))を として宣言します。変数nom varchar(50);を宣言します。 変数sucu整数を宣言します。 begin ここからいくつかを選択してください。prov =:prov into:nom; anothertableから別のものを選択してください。class =:fromclassとdatecolumnの間:f1と:f2 into:sucu; end Query1.OpenまたはExecSQLの場合: メッセージ 'トークンが不明、行x列y?'で例外クラスTBXErrorを発生させます。 – NizamUlMulk

+0

@ NizamUlMulkそのような情報はコメントではなく、あなたの質問に属します。あなたの質問を編集してください –

0

私のために働いた唯一の方法は、ブロック内の内部変数に ":"を入れていないということでした。 Ex。 select data from table into var;それは仕事です!そして、これはブロックなので、if!とvarを評価してください!

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

と解決されたビジネス!

関連する問題