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

解決


  2013-08-28 23:21:17  No: 45167

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-29 00:00:12  No: 45168

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-29 00:07:05  No: 45169

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


  2013-08-29 16:43:13  No: 45170

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 18:03:49  No: 45171

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


  2013-08-29 20:47:22  No: 45172

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

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

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


Mr.XRAY  2013-08-29 22:08:03  No: 45173

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

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

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

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


HOta  2013-08-30 00:48:01  No: 45174

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


Mr.XRAY  2013-08-30 03:16:07  No: 45175

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

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


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

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






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