ADOQueryのSQL文

解決


もも  2009-07-14 00:01:55  No: 35113

いつもお世話になります。
  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;
---------------------------------------------------------------


SQL文  2009-07-15 08:14:02  No: 35114

>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'としています)
パラメーター化すればパラメーターに変数を渡せば変数の中身がパラメータの値
として処理されます。


もも  2009-07-15 20:16:20  No: 35115

いつもお世話になります。
  SQL文様、ご教授ありがとうございます。
  今まで頼っていたSQL文のサイトでは、ご教授頂いたような細部まで
の解説がなく困っていました。
  ここ1週間あたりでかなりレベルアップ出来ました。

  オープン系の開発は不慣れなもので、かなりピントのボケた質問を
したりと、ご指導を頂く諸先輩方々をかなり疲れさせてしまっている
ようです。皆様が苦労して修得されたノウハウを惜しみなくご教授
抱いて大変恐縮しております。
  これからもよろしくお願い致します。(m_m)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加