異なるフィールドをSQLで同時に指定して検索するには?

解決


Delphi大好き  2010-09-25 21:42:54  No: 39222

query1.SQL.Text :=
    'SELECT * FROM 金銭出納帳 WHERE 出納日付 BETWEEN '
    +'"2010/0901"'
    + ' AND ' +
    '"2010/09/31"'
    + ' AND  WHERE 出納名称 = "本";';

という事をしたいと考えています。

特定の日付の範囲内から、特定の名称のデータを引き出したいわけです。
が、このままだとエラーになります。

以前教えて貰った(一年ほど前)、WHERE句で複数のフィールドを検索する方法(ANDでつなぐ)をやってみましたが駄目でした。

どうすれば上記を実行出来ますでしょうか?
参考書にも載ってないので困っています。
もし解決策ありましたらよろしくお願いしますm(__)m。


igy  2010-09-25 23:36:38  No: 39223

>    +'"2010/0901"'

  +'"2010/09/01"'
にして、

>    + ' AND  WHERE 出納名称 = "本";';

 + ' AND 出納名称 = "本";';  // ANDの後ろには、全角空白がありますので、それも削除

にしたら、どうなりますか?

(エラーになる場合、エラーメッセージなども記載したほうがよいかと思います。)


igy  2010-09-25 23:54:32  No: 39224

また、
 WHERE (出納日付 BETWEEN "2010/09/01" AND "2010/09/31") AND (出納名称 = "本")
のようにカッコを付けたほうがよいかもしれません。(確認したわけではないですけど・・・)


Delphi大好き  2010-09-26 00:24:31  No: 39225

igyさんいつもありがとうございますm(__)m。

一番上のコードは質問用に分かり易くと思い書き直したコードです。
全角空白入っていたのは気づきませんでした><。

igyさんのおっしゃるとおりにしたら、無事動作しました。
あと、SQLでも()が使えるんですね(!)。
良い情報ありがとうございます。
これで見易いコードが書けそうです。

以下が実際のコードです。
おかげ様できちんと動作しました^^。
それではありがとうございました。

query1.SQL.Text := 
    'SELECT * FROM 金銭出納帳 WHERE 出納日付 BETWEEN "'
    + DateTimeToStr(DateTimePicker1.Date)
    + '" AND "' +
    DateTimeToStr(DateTimePicker2.Date)
    + '" AND 出納名称 = "'
    + combobox1.Text
    + '";';
  DataSource1.DataSet := Query1;
  Query1.Open;


Delphi大好き  2010-09-26 00:29:12  No: 39226

補足です。
解決してしまったからつい忘れてましたが、
動かない時のエラーの内容は、

キーワードの使用が無効です.
キーワード: WHERE
行番号: 1.

でした。


HOta  2010-09-26 19:37:40  No: 39227

パラメターでする方法も有ります。DateTimeToStrで出来る文字列が、データーベースによって型が違い、受け取れない場合が有る場合も、対応できます。


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

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






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