datetimepickerのnull処理

解決


mimi  2010-01-14 00:02:18  No: 36963  IP: 192.*.*.*

datetimepickerのnull値処理に関する質問があります。datatimepickerにnullが入る場合エラー(''は日付型ではありませんというエラーです)になってしまうので、if文でエラーを発生させないようにしたいと思っています。if datatimepicker.date is not null や  if datatimepicker.data <> ''を実験してみたのですが、コンパイルエラーになります。if文でもしnull値ならという構文を書くやり方がわかるかたいらっしゃいますか?


また、データベースからクエリで持ってくるときに、sql文の中でNVL関数でnull値を判断しようとしたら、読み込みませんでした。delphi5で、null値を0や空に置き換えるやり方はありますか?

編集 削除
DEKO  2010-01-14 01:22:15  No: 36964  IP: 192.*.*.*

こんにちは。
SQL で NULL 項目かどうかは、

FieldByName('ほにゃらら').IsNull

で判定できます。
https://www.petitmonte.com/bbs/answers?question_id=6738
この件と関連するのだと思われますが、

begin
  if Query1.FieldByName('ほにゃらら').IsNull then
    dDate := -1
  else
    dDate := Query1.FieldByName('ほにゃらら').asDateTime;
  SetDate(dDate);
end;

こんな感じで処理するしかないと思います。
もしくは、空の日付を最初から -1 で登録するようにするかですね。

編集 削除
あだち  2010-01-15 13:47:37  No: 36965  IP: 192.*.*.*

datetimepickerでは、ShowCheckboxプロパティを、Trueにすることで、Null(未設定)の判定をさせることになると思います。
ShowCheckbox=Trueにすると、日付の頭にチェックボックスが出ます。
チェックボックスをはずすと日付入力部分がEnable状態になります。

このチェックボックス状態は、プログラムからは、Checkedプロパティで見れます。

編集 削除
Ru  2010-01-15 15:10:27  No: 36966  IP: 192.*.*.*

以下のSQLでNULLを0に変えれますか?
DBにより対応していない可能性があります。

SELECT 
  CASE WHEN Field1 IS NULL THEN 0 ELSE Field1 END AS Hoge1

FROM 
  Table

0は日付型に変換して処理する必要があるかも?

編集 削除
mimi  2010-01-16 12:57:15  No: 36967  IP: 192.*.*.*

教えていただいた方法すべてで、実行することができました。
ありがとうございます。

編集 削除