全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:6742
推到 Plurk!
推到 Facebook!

請問如何判斷日期輸入是否正確

答題得分者是:shinhrn
luckylin25
一般會員


發表:24
回覆:25
積分:9
註冊:2005-03-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-04 17:11:32 IP:211.72.xxx.xxx 未訂閱
請問各位大大,我的資料庫是SQL SERVER2000 欄位資料型態是DataTime型態 在輸入日期時,想判斷輸入的日期是否正確 是要在哪個事件判斷呢 我在Table的欄位裡的Change和DBEdit.onExit裡寫上判斷日期是否正確 但我輸入錯誤的日期,並不會去執行這二個地方 而是show出 "2005/04/31"is not a vaild data and time 我想要show出的是我自己寫的錯誤訊息 我看了很多關於日期的討論 大部分都是把資料庫的日期弄成字串來判斷的 發表人 - luckylin25 於 2005/04/04 17:16:45
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-04 18:09:56 IP:202.62.xxx.xxx 未訂閱
您好﹗    提供給您兩種方法參考﹕ 一﹒可使用IsValidDate函數來檢查日期格式是否正确﹐因為IsValidDate函數的傳入值形態為Word﹐所以要先使用DecodeDate函數將輸入的日期分解成Word形態的值﹐方法如下﹕
uses DateUtils
//引用DateUtils單元
Var
  Y, M, D : Word;
begin
  DecodeDate(StrToDate(DBEdit1.Text), Y, M, D);
  if IsValidDate(Y, M, D) then
    ShowMessage('日期格式正确')
  else
    ShowMessage('日期格式錯誤');
end;
二﹒可使用TryStrToDate函數來判斷日期的格式是否正确﹐嘗試將Str字串值轉換成日期形態﹐如果可以轉換的話﹐則做轉換動作﹐方法如下﹕
Var
  DT : TDateTime;
begin
  if TryStrToDate(DBEdit1.Text, DT) then
    ShowMessage('日期格式正确')
  else
    ShowMessage('日期格式錯誤');
end;
P.S 剛才測試一下﹐似乎只有TryStrToDate函數可以在日期格式錯誤時可以顯示出自定的錯誤信息﹐而IsValidDate函數不能在日期格式錯誤時顯示出自定的錯誤信息﹐而是顯示Delphi內定的'*** is not a valid date and time'﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/04/04 18:20:54
------
忻晟
luckylin25
一般會員


發表:24
回覆:25
積分:9
註冊:2005-03-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-06 09:15:12 IP:211.72.xxx.xxx 未訂閱
cashxin2002版主 我試了你說的第二個方法 但如果我輸入錯誤的日期,他還是先顯示"2005/04/31"is not a vaild date and time 我把程式放在Table的欄位裡的Change事件裡 程式應該放在哪個事件判斷才會顯示自己所要show出的訊息
shinhrn
中階會員


發表:54
回覆:165
積分:83
註冊:2002-06-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-06 10:07:55 IP:218.170.xxx.xxx 未訂閱
引言: cashxin2002版主 我試了你說的第二個方法 但如果我輸入錯誤的日期,他還是先顯示"2005/04/31"is not a vaild date and time 我把程式放在Table的欄位裡的Change事件裡 程式應該放在哪個事件判斷才會顯示自己所要show出的訊息
以前我也遇到這個問題 請將判斷放在 SetText 即可.... 當初我是放在 Validate 上@@,不知為何Delphi居然無法完全檢查出來?@@|||... 請參考http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44756
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-06 10:25:53 IP:70.84.xxx.xxx 未訂閱
絕對不能放在 OnChange 事件中 因為你每輸入一個字, 就會觸發一次 OnChange 事件 輸入 2005/04/01 會連續觸發 10 次 OnChange 建議你不要使用 DateTime 型態的欄位, 最好是改用 char 型態 比較容易處理這些問題 如果使用 DateTime 型態, 則內定的型態檢查會最先被執行 當輸入不正確的日期時, 你的程式將完全沒有機會接手
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-06 10:46:00 IP:202.62.xxx.xxx 未訂閱
您好﹗    我有測試過之前回覆的第二種方法﹐應可避免出現顯示Delphi內定的'*** is not a valid date and time'錯誤信息﹐當輸入的日期格式錯誤時﹐會直接顯示出else子句中的ShowMessage內容﹐貼出您的程式碼部分來看看﹒    您可將此程式碼寫在DBEdit元件的OnExit事件中﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
luckylin25
一般會員


發表:24
回覆:25
積分:9
註冊:2005-03-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-06 13:43:04 IP:211.72.xxx.xxx 未訂閱
原來是放在SetText事件裡啊 感謝shinhrn大大 也謝謝各位大大的回應
系統時間:2024-06-27 1:24:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!