いつもお世話になります。
以下の日付項目の取り扱いで困っております。
【ケース1】
テーブルへの書き込みをADOQuery1.Parameters.ParamByName
('_登録日').Value := Null;で書き込み、DateTimeToStr
(ADOQuery1.FieldByName('登録日').AsDateTime);で読み込むと、
結果は 1899/12/30 となります。
【ケース2】
テーブルへの書き込みをADOQuery1.Parameters.ParamByName
('_登録日').Value := StrToDateTime('0');で書き込み、
DateTimeToStr(ADOQuery1.FieldByName('登録日') .AsDateTime);
で読み込むと、結果は 1899/12/30となります。
ケース1は、テーブルの該当項目には何も表示されていませんので、
Null??と思いますが、どうして結果が1899/12/30なのか判りません。
ケース2も同様に結果が1899/12/30なのか判りません。
最終的に何がしたいかといいますと、テーブルの日付項目に対して
Nullの検査またはZEROの検査をしたいのですが、どうすればよいか
判りません。
どなたかご教授頂けますでしょうか?
環境は、WindowsXP、Delphi2007、Access2003です。
>どうして結果が1899/12/30なのか判りません。
ヘルプによると、
TDateTime 型
を表示すると、
> ほとんどの VCL オブジェクト は TDateTime 型を使って日付値と時刻値を示します。
> TDateTime 値の整数部は西暦 1899 年 12 月 30 日からの経過日数を示します。
> TDateTime の小数部はその日の時間を示します。
> 次の表に TDateTime 値の例とそれに対応する日付と時間を示します。
> 0 1899 年 12 月 30 日 午前 12:00
だそうです。
> 最終的に何がしたいかといいますと、テーブルの日付項目に対して
> Nullの検査またはZEROの検査をしたいのですが、どうすればよいか
> 判りません。
試していませんが、
if (ADOQuery1.FieldByName('登録日').AsDateTime = 0) then
begin
// 0 が格納?
end;
で判断は出来ますか?
igy様
いつもお世話になります。
『0』を格納してAccessのテーブルを見ますと、0:00:00と表示
します。
これをDateTimeToStr(ADOQuery1.FieldByName('登録日') .AsDateTime);
で読み込むと、結果は 1899/12/30となります。
この日付/時刻型というのは非常に扱いにくいです。
日付はとく取り扱う項目ですが、フォームで日付の入力が無かった場合、
テーブルに対してはどのように処理されていますか?
> フォームで日付の入力が無かった場合、
> テーブルに対してはどのように処理されていますか?
私の場合、0 (すなわち 1899/12/30 )を格納してます。
ありがとうございます。
私もそのように致します。
nilは
ADOQuery1.FieldByName('登録日').IsNull
で検査できます。
ツイート | ![]() |