ADOQueryで日付型のSQLがヒットしない。

解決


 2013-08-28 14:21:17  No: 45167  IP: 192.*.*.*

Delphi6Pro、ODBCのParadoxを使い開発しています。ADOQueryで日付型のSQLを使っているのですがエラーは発生しないものの検索通りのデーターがヒットしません。

procedure TFamain.Button1Click(Sender: TObject);
var
  s :String;
begin
  s :='select * from TEST where 日付 =2013/08/31';
  ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add(s); ADOQuery2.Open;
end;

「↑  エラーは出ないがヒットしない」

尚、下記サイトも参照してみました。

http://mrxray.on.coocan.jp/Delphi/plSamples/580_ADO_TableList.htm

どなたか御存知の方教えて下さい。

編集 削除
Quest  2013-08-28 15:00:12  No: 45168  IP: 192.*.*.*

ADOQuery2.Open;

ADOQuery1.Open;
じゃないですかってのは、置いといて(^^;

確認していませんが
s :='select * from TEST where 日付 =CAST(''2013/08/31'' AS DATE)';
ではどうですか?

あるいは
s :='select * from TEST where 日付 =:DT';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s);
ADOQuery1.Parameters.ParamByName('DT').Value = EncodeDate(2013,8,31);
ADOQuery1.Open;
とか?
ADOは使ったこと無いんでパラメータの設定方法が違うかも。

編集 削除
Syake  2013-08-28 15:07:05  No: 45169  IP: 192.*.*.*

Questさんの補足で
>s :='select * from TEST where 日付 =2013/08/31';
がコピペならの日付部分の記述がおかしいです。
日付はシングルコーテーションで括らないと駄目です。
日付 = '2013/01/01'
よって、記述する時は
s :='select * from TEST where 日付 =''2013/08/31''';
だと良いと思います。

編集 削除
 2013-08-29 07:43:13  No: 45170  IP: 192.*.*.*

QuestさんSyakeさん、どうもです!

MrXrayさんのホームページに書かれているQuestさんの方法しか無いみたいです。この方法だとSQLの文章を文字型で繋げる場合少し複雑になってしまいますが。

s :='select * from TEST where 日付 =:DT';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s);
ADOQuery1.Parameters.ParamByName('DT').Value = EncodeDate(2013,8,31);
ADOQuery1.Open;

解決です!

編集 削除
HOta  2013-08-29 09:03:49  No: 45171  IP: 192.*.*.*

Syakeさんの方法ですが、Paradoxは日付型を'mm/dd/yyyy'で表しますので、
>s :='select * from TEST where 日付 =''2013/08/31''';
はs :='select * from TEST where 日付 =''08/31/2013''';
になると思います。

編集 削除
 2013-08-29 11:47:22  No: 45172  IP: 192.*.*.*

HOtaさん、追加発言有難う御座います。

私の方でやってみたのですが残念ながらダメでした。

MrXrayさんのやり方しかないみたいです。

編集 削除
Mr.XRAY  2013-08-29 13:08:03  No: 45173  IP: 192.*.*.*

こんにちは,Mr.XRAY です.
サイトを利用して頂き,ありがとうございます.

http://mrxray.on.coocan.jp/Delphi/plSamples/580_ADO_TableList.htm#03

のリスト 3 の Button6Click のコードに [実行時にSQLに直接日付を指定する場] 
を書いてはいるのですが,これではダメでしょうか.
このリスト 3 の一番下です.

個人的には,直接 SQL 文には書かないで,大抵はパラメータ文で設定しています.
というのは,SQL のパラメータは変数のことが多いので.
SQL 文に変数を使うこともできますが,結構面倒です (書き方はもう忘れてしまいした))

編集 削除
HOta  2013-08-29 15:48:01  No: 45174  IP: 192.*.*.*

#でくくるのは、Accessの文法ですね。
Paradoxはシングルクオーテーションでくくれば良かったはずですが、動かないようですね。おかしいですね。

編集 削除
Mr.XRAY  2013-08-29 18:16:07  No: 45175  IP: 192.*.*.*

>#でくくるのは、Accessの文法ですね。

なんですが,質問された方は,ODBCのParadoxを使い開発 と書いていますが,
例のサンプルは,プロバイダの設定が Microsoft.Jet.OLEDB.4.0 なんです.
スレッドの書き込みの流れで判断して,もしかしたら,と思ったんですが (^^;

編集 削除