線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1131
推到 Plurk!
推到 Facebook!

如何檢查 DBEdit 資料的正確性?

尚未結案
JuliusChen
一般會員


發表:13
回覆:8
積分:4
註冊:2005-06-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-10 10:41:42 IP:220.134.xxx.xxx 未訂閱
請教各位前輩: 我有一個 Date Type 的 DBEdit 欄位, 我想檢查他在使用者輸入完資料後的格式是否正確, 我測試輸入一個不合法的格式, 他會出現 Debuuger Exception Notification messagesbox, 告訴我 raised exception class EConverterror whith messages 資料轉換的錯誤, 我試著在 DBEdit 的 onDatachange , onExit , Dataset 的 BeforePost 來攔截,都欄不到, 是不是有什麼方法可以擋住 這個 messagesbox, 而自己處理這個錯誤呢? 非常感謝!! 發表人 - juliuschen 於 2005/08/10 11:13:35
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-10 12:44:35 IP:61.222.xxx.xxx 未訂閱
procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet); begin TRY EXCEPT ON E:EXCEPTION DO SHOWMESSAGE(E.Message); END; end;
JuliusChen
一般會員


發表:13
回覆:8
積分:4
註冊:2005-06-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-10 13:56:05 IP:220.134.xxx.xxx 未訂閱
感謝回應!! 我試了一下,還是沒有作用... 這個 system error message 還是會在我離開 DBEdit 時就顯現... 例如 我在這個欄位打入 2005/01 然後跳到下一欄位, 此 error messagebox 即跳出,程式就進入 Debug 了...
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-10 14:11:42 IP:61.222.xxx.xxx 未訂閱
編譯時期時會有這種現象, 直接執行執行檔的話就不會如此
cashxin2002
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-10 14:25:02 IP:202.62.xxx.xxx 未訂閱
您好﹗    一般來講﹐對輸入資料的驗証我們會寫在DataSet的BeforePost事件中﹐當然寫在輸入元件的OnChange事件或OnExit事件中也是可以的﹐這是一種習慣﹐將所有需要驗証的輸入內容都寫在DataSet的BeforePost事件中﹐以利于程式碼修改的可攜性﹒
舉個例子來說﹐DBEdit1元件對應資料表的日期欄位﹐以下程式碼寫在DataSet的BeforePost事件中﹐用于驗証輸入內容的正确性﹐如果不正确﹐則取消Post﹐并將輸入焦點轉到該DBEdit1上﹒
Var
  DT: TDateTime
begin
  if Not TryStrToDate(DBEdit1.Text, DT) then
    begin
      ShowMessage('輸入的資料形態錯誤﹐請修正﹗');
      DBEdit1.Clear;
      DBEdit1.SetFocus;
      Abort; //取消執行此行下所有的程式碼
    end;
end;
不同的資料內容驗証有不同的方法﹐如上的範例中﹐因為是涉及到日期資料﹐所以采用TryStrToDate函數﹐在其它的資料驗証中﹐可使用相同的思路考量﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
JuliusChen
一般會員


發表:13
回覆:8
積分:4
註冊:2005-06-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-10 15:06:06 IP:220.134.xxx.xxx 未訂閱
感謝兩位的回答.. 我直接去執行.exe 檔,但離開這個 DBEdit 的欄位, 他還是會有error 發生.. error messages 為 '2005' is not a valid date and time. 我如果輸入 2005/08/01 就可以過了, 我一直想把這個訊息攔截起來, 作一些處理... 謝謝!!
cashxin2002
版主


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-10 17:32:39 IP:202.62.xxx.xxx 未訂閱
您好﹗    使用小弟以上的方法應該不會有這樣的問題﹐因為在任何的方法引起DataSet的Post時﹐皆會先触發DataSet的BeforePost事件中程式碼﹐在以上的範例中已對不符合驗証條件的做Abort(取消)動作了﹐既然沒有做之后的Post方法﹐就不會因輸入資料內容不正确而出現錯誤了﹒ 方便貼出這部分的完整程式碼嗎﹖    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/08/10 17:37:53
------
忻晟
shine5188
一般會員


發表:2
回覆:15
積分:8
註冊:2005-05-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-13 16:08:07 IP:211.20.xxx.xxx 未訂閱
樓主可能在edit1的事件有判斷 如OnChange事件或OnExit事件中
系統時間:2024-06-24 20:21:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!