1.TSQLQuery.SQL.Add(定数宣言したSQL);
2.TSQLQuery.ParamByName('TEST').AsString := '12345';
といったような記述をしており、open直前くらいにバインド変数が設定されたSQLをテキストに書き出したいと思っています。
TSQLQuery.SQL.Textでは値(上記でいう「12345」)が設定されていませんし、、、
どういった記述にすれば、バインド変数が設定されたSQLを取得することができるのでしょうか?
宜しくお願いします。
それは、例えば
TSQLQuery.SQL.Add('SELECT * FROM TABLE1 WHERE KEY1 = :TEST');
TSQLQuery.ParamByName('TEST').AsString := '12345';
としたときに
str := HogeHoge(TSQLQuery);
とかやると
strに SELECT * FROM TABLE1 WHERE KEY1 = '12345' が代入される
HogeHoge関数が無いかということでしょうか?
多分、無いんじゃないかと思いますが。
Quest様
やはり関数で簡単にやる方法は無いんですね。。。
とすると、実現方法としては1つ1つ文字列置換するしかないんですよね。
ちなみに、TSQLQueryしか持っていない関数内で1つ1つ置換する方法
(「:TEST」と「12345」を取得する方法)ってありますか?
TSQLQueryのプロパティとか見てもよくわからなかったもので。。
params辺りでしょうか・・・?
うーん、何を求めているのか良く分からないのですが
パラメータの名前とその値の一覧がほしいのでしょうか?
それとも、最終的にデータベースに投げられるSQL文の
全容を知りたいのでしょうか。
後者であれば、データベースによっては実行されたSQLのログを
取り出せるものもあるようです。
また、前者であれば
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
s: string;
begin
SQLQuery1.SQL.Text := 'SELECT * FROM TEST1 WHERE KEY1=:DATA1 AND KEY2=:DATA2';
SQLQuery1.ParamByName('DATA1').AsInteger := 123;
SQLQuery1.ParamByName('DATA2').AsDateTime := Now;
for i := 0 to Pred(SQLQuery1.Params.Count) do
begin
s := SQLQuery1.Params[i].Name + ' = ' + VarToStr(SQLQuery1.Params[i].Value);
Memo1.Lines.Add(s);
end;
end;
こんな事をすれば、一応はパラメータリストを取得できます。
Quest様
教えて頂いた方法でパラメータリストが取得できることを確認しました!
(説明が下手な中、考えを汲み取って頂いて感謝しております。)
後はこれを料理すればイロイロできますね。
ありがとうございました。
ツイート | ![]() |