日付型を検索するSQLの書き方。

解決


ちゃん  2006-05-25 15:42:51  No: 21802  IP: 192.*.*.*

paradox7のデータ項目が D の日付型になっています、
カレンダーをクリックしてある日を検索したいのですが
SQLの書き方ができません。

検索して表示させたいのですが。。。
MonthCalendar の日付をクリックして表示させたいのです。

var
  days : double; として

days:=Monthcalendar1.date;

Query1.SQL.Add('Select * from DataDB'); 

以下をどのように書くのでしょうか?

Query1.SQL.Add('where day=day');

paradox7 の日付型はdouble  とのことです。
Monthcalendar1.date  はdate 型ですので
どうしたものでしょうか?

よろしくお願いします。  ちゃん

編集 削除
igy  2006-05-25 16:37:23  No: 21803  IP: 192.*.*.*

試したわけでは、ありませんが、

with Query1 do
begin
    SQL.clear;
    SQL.Add('select * from DataDB where day = :ParamDate');
    ParamByName('ParamDate').AsDate := Monthcalendar1.Date;
end;

のような感じでは、できませんか?

編集 削除
Basser  2006-05-25 16:54:22  No: 21804  IP: 192.*.*.*

>以下をどのように書くのでしょうか?
>
>Query1.SQL.Add('where day=day');

  Query1.SQL.Add(Format(
    'WHERE (day = "%s")',
    [FormatDateTime('mm"/"dd"/"yyyy', Monthcalendar1.date)]
  ));

です。

編集 削除
ちゃん  2006-05-25 19:59:47  No: 21805  IP: 192.*.*.*

早速の回答ありがとうございます。
igy さん
    ParamByName は未定義の識別子と出てしまいます。
Basser  さん
    キーワードの使用が無効です
    キーワード Day
    行番号2:
    と出てきます。
    テーブルの構造情報では  
       FieldName = Day
       Type = D
    となっていますので なぜ Day ?。。

  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('Select * from DataDB');
  Query_Trail.SQL.Add(Format(
    'WHERE (Day = "%s")',
    [FormatDateTime('mm"/"dd"/"yyyy', Monthcalendar1.date)]
  ));
  Query1.open;
とそっくりまねて書くしか芸がありません。
よろしくお願いします。

編集 削除
igy  2006-05-25 20:33:02  No: 21806  IP: 192.*.*.*

>igy さん
>    ParamByName は未定義の識別子と出てしまいます。

    ParamByName('ParamDate').AsDate := Monthcalendar1.Date;
の部分を
    Query1.ParamByName('ParamDate').AsDate := Monthcalendar1.Date;
にしたら、どうですか?

編集 削除
igy  2006-05-25 20:50:21  No: 21807  IP: 192.*.*.*

>Query_Trail.SQL.Add(Format(

Query1.SQL.Add(Format(
ですよね。

編集 削除
igy  2006-05-25 21:00:18  No: 21808  IP: 192.*.*.*

>    キーワードの使用が無効です
>    キーワード Day
>    行番号2:
>    と出てきます。

で、

>    'WHERE (Day = "%s")',

この部分のダブルクォーテーションをシングルクォーテーションにしたらどうなります?

    'WHERE (Day = ''%s'')',    // " を  '' に置き換えています。

編集 削除
Basser  2006-05-26 09:58:11  No: 21809  IP: 192.*.*.*

>Basser  さん
>    キーワードの使用が無効です
>    キーワード Day
>    行番号2:
>    と出てきます。
>    テーブルの構造情報では  
>       FieldName = Day
>       Type = D
>    となっていますので なぜ Day ?。。

フィールド名 Day は、ローカルSQLで予約語になっていますね。
フィールド名を変更しないといけないでしょう。

編集 削除
ちゃん  2006-05-26 11:52:30  No: 21810  IP: 192.*.*.*

DAYが予約語ということで
データベースの項目名を
「DAY」から「日付」という項目名に変更しました。
1:
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * from DataDB');
  Query1.SQL.Add(Format('WHERE (日付 = "%s")',
  [FormatDateTime('mm"/"dd"/"yyyy', Monthcalendar1.date)]
  ));
  Query1.Open;
--------------------------
 2:
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * from DataDB where 日付 = :ParamDate');
  Query1.ParamByName('ParamDate').AsDate := Monthcalendar1.Date;
  Query1.Open;
以上2通りやってみたのですがどちらも思い通りにできました。
igy さんには文の間違いを指摘していただきご迷惑をかけました。
ありがとうございます。


                              ちゃん

編集 削除