いつもお世話になります。
Delphiの理解が足りないのか、SQL文の理解が足りないのか判らない
のですが、以下のADOQueryのSQL文でWHERE句には変数は記述出来ない
のでしょうか?
フォームから入力した値と比較する場合は、ADOQueryのSQL文では
どのような記述になるのでしょうか?
環境はWindowsXP、Delphi2007です。
どなたかご教授をお願い致します。
---------------------------------------------------------------
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
g2_SQL := 'SELECT 名称区分,名称№,名称(ふりがな),'
+ '名称(漢字),名称(略称),備考 FROM Name_Table'
+ ' WHERE 名称区分 = g2_int_wk';
ADOQuery1.SQL.Add(g2_SQL);
ADOQuery1.Open;
---------------------------------------------------------------
>g2_SQL := 'SELECT 名称区分,名称№,名称(ふりがな),'
> + '名称(漢字),名称(略称),備考 FROM Name_Table'
> + ' WHERE 名称区分 = g2_int_wk';
g2_int_wk が変数と思われますが、プログラム中で使用する変数名
そのものをダイレクトにSQL文に記述することは不可です。
変数の中身をSQL文に記述すればよいのだから
(1)g2_int_wk が変数で値が数値(仮にここでは整数)なら
+ ' WHERE 名称区分 = ' + IntToStr(g2_int_wk) + ';';
(2)g2_int_wk が変数で値が文字列なら
+ ' WHERE 名称区分 = ' + QuotedStr(g2_int_wk) + ';';
(3)g2_int_wk という文字列そのものを渡したいのであれば
+ ' WHERE 名称区分 = ' + QuotedStr('g2_int_wk') + ';';
と普通はします。要は、数値は数値を表す文字列で、文字(列)はシングルクォーテーションで括って渡すのがSQL文の約束事です。
(4)おまけ
g2_int_wk が変数であればこの部分をパラメータにして
+ ' WHERE 名称区分 = :A;';
ADQOuery1.SQL.Add(g2_SQL);
ADOQuery1.Parameters.ParamByName('A').Value := g2_int_wk;
ADOQyery1.Open;
とすることもOKです。(パラメータ名をここでは仮に'A'としています)
パラメーター化すればパラメーターに変数を渡せば変数の中身がパラメータの値
として処理されます。
いつもお世話になります。
SQL文様、ご教授ありがとうございます。
今まで頼っていたSQL文のサイトでは、ご教授頂いたような細部まで
の解説がなく困っていました。
ここ1週間あたりでかなりレベルアップ出来ました。
オープン系の開発は不慣れなもので、かなりピントのボケた質問を
したりと、ご指導を頂く諸先輩方々をかなり疲れさせてしまっている
ようです。皆様が苦労して修得されたノウハウを惜しみなくご教授
抱いて大変恐縮しております。
これからもよろしくお願い致します。(m_m)
ツイート | ![]() |