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

解決


Delphi大好き  2010-09-25 12:42:54  No: 39222  IP: 192.*.*.*

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

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

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

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

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

編集 削除
igy  2010-09-25 14:36:38  No: 39223  IP: 192.*.*.*

>    +'"2010/0901"'

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

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

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

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

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

編集 削除
igy  2010-09-25 14:54:32  No: 39224  IP: 192.*.*.*

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

編集 削除
Delphi大好き  2010-09-25 15:24:31  No: 39225  IP: 192.*.*.*

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-25 15:29:12  No: 39226  IP: 192.*.*.*

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

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

でした。

編集 削除
HOta  2010-09-26 10:37:40  No: 39227  IP: 192.*.*.*

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

編集 削除