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

時間錯誤問題

答題得分者是:st33chen
lasterliu
一般會員


發表:38
回覆:57
積分:19
註冊:2007-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-10-12 15:11:41 IP:60.251.xxx.xxx 訂閱
請問各位大大一個時間偵錯處理問題:
小弟使用ADO元件 DBEditr及DBGrid,有個欄位的型態為smalldatetime,小弟想在此做個偵錯處理。
目前小弟有兩個方向:
第一個:
想在前端進行偵錯,但不知該寫在哪一個事件中,因為輸入格式一不對,離開此欄位就會跳出後端資料庫的錯誤訊息,
有試過在Exit event中進行攔截判斷,但此事件順序好像比較後面,所以不知該再哪個事件中進行偵錯,請各位大大指導一下,謝謝。
第二個:
就是依靠後端資料庫進行判斷,但不知該再哪攔截此錯誤訊息,才可將訊息中文化,小弟是使用ADOQuery元件,有試過在EditError、PostError Event中攔截,但都無效,也煩請大大指導一下,謝謝。

如有錯誤的地方或描述不好的地方,敬請告知與原諒,小弟會盡快更正~~^^
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-10-13 10:42:35 IP:114.32.xxx.xxx 未訂閱
您好,

1. edit 相關元件可否先用 editmask 去設定輸入的格式以減少格式錯誤的機率

2. 前端攔截可否用 keypress 或 keyup 事件試一下

3. 中段可否用 dataset 的 beforepost 事件試一下

4. 後端資料庫則和用什麼資料庫有關係, 我直覺判斷可能是在 trigger 中寫判斷式
如果您用的 db 無 trigger, 那!那!那!再想想.
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
lasterliu
一般會員


發表:38
回覆:57
積分:19
註冊:2007-11-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-10-13 12:01:34 IP:60.251.xxx.xxx 訂閱
st33chen大大您好:
1、若使用editmask,我的測試是用DBEdit Editmask(瀏覽時顯示DBEdit、編輯時則顯示Editmask),如此一來我就可以在前端進行攔截判斷了。

2、此兩個事件都可攔截,測試缺點是每按一次按鍵就要判斷一次,還有若還沒KEY IN完成,滑鼠點到別的地方,就會發生錯誤了。

3、使用beforepost(EditErro、PostErro),沒有效果,我猜應該是事件的順序比較後面。

4、小弟是使用MS-SQL,有trigger功能。

目前整理大大提供的資訊與小弟測試的結果有兩個暫時方案:
第一個是此欄位先用editmask代替輸入,即可進行偵錯判斷。
第二個是先將資料INTO至一個暫存資料表,如此他在此欄位KEY IN時,即使輸入有誤,也不會立即發生錯誤,小弟即可進行偵錯判斷了。

但小弟還是想詢問是否有直接的方法,而不需再透過第二元件的幫忙即可進行偵錯判斷,若有描述不好的地方,敬請見諒
===================引 用 st33chen 文 章===================
您好,

1. edit 相關元件可否先用 editmask 去設定輸入的格式以減少格式錯誤的機率

2. 前端攔截可否用 keypress 或 keyup 事件試一下

3. 中段可否用 dataset 的 beforepost 事件試一下

4. 後端資料庫則和用什麼資料庫有關係, 我直覺判斷可能是在 trigger 中寫判斷式
如果您用的 db 無 trigger, 那!那!那!再想想.
編輯記錄
lasterliu 重新編輯於 2009-10-13 13:42:50, 註解 無‧
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-10-13 15:14:33 IP:118.169.xxx.xxx 未訂閱
如果要採用第二種, 想要有中文的錯誤訊息可以用以下方式
try
輸入你要的判斷, 或者存檔指令, 如 post, commit
except
on E:Exception do begin
ShowMessage(pChar(E.Message #13 '你自己的中文訊息'))
end;
end;

註:EMessage 是會秀出原來Delphi內建的錯誤英文訊息, 可加可不加)
===================引 用 lasterliu 文 章===================
第二個:
就是依靠後端資料庫進行判斷,但不知該再哪攔截此錯誤訊息,才可將訊息中文化,小弟是使用ADOQuery元件,有試過在EditError、PostError Event中攔截,但都無效,也煩請大大指導一下,謝謝。

如有錯誤的地方或描述不好的地方,敬請告知與原諒,小弟會盡快更正~~^^
編輯記錄
P.D. 重新編輯於 2009-10-13 15:15:16, 註解 無‧
lasterliu
一般會員


發表:38
回覆:57
積分:19
註冊:2007-11-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-10-14 08:50:35 IP:60.251.xxx.xxx 訂閱
P.D大大您好:
首先謝謝大大的回覆,小弟有個疑問?
若是要進行儲存動作而進行以下判斷,是OK的。
但是若是還沒有要儲存,只是再DBEdit中編輯完跳下一個物件,它自動會回寫DB,進而跳出錯誤,
那我應該是要將此判斷寫在哪個事件中呢?

===================引 用 P.D. 文 章===================
如果要採用第二種, 想要有中文的錯誤訊息可以用以下方式
try
輸入你要的判斷, 或者存檔指令, 如 post, commit
except
on E:Exception do begin
ShowMessage(pChar(E.Message #13 '你自己的中文訊息'))
end;
end;

註:EMessage 是會秀出原來Delphi內建的錯誤英文訊息, 可加可不加)
===================引 用 lasterliu 文 章===================
第二個:
就是依靠後端資料庫進行判斷,但不知該再哪攔截此錯誤訊息,才可將訊息中文化,小弟是使用ADOQuery元件,有試過在EditError、PostError Event中攔截,但都無效,也煩請大大指導一下,謝謝。

如有錯誤的地方或描述不好的地方,敬請告知與原諒,小弟會盡快更正~~^^
heartgame0
一般會員


發表:2
回覆:29
積分:11
註冊:2008-07-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-10-28 12:12:50 IP:220.131.xxx.xxx 訂閱
不是在onexit嗎,如果沒問題就出去,有問題,如果一定要離開就清空(有其它條件才能空的吧),或不正確就不讓它離開,一定要正確才能離開。
------
資訊業是永遠不能停止學習的行業!
但是進步都只是一點點一點點!
==可以不用理我!因為我的程度只有2成,或許不到!!
==我只會拉拉元件,打打迴圈,打打條件判斷,連連資料庫,rs232送送訊號,印表機簡單列印。
只有寫寫小小的點餐軟體(為何想寫,因為叫人家改的小東西,都ooxx,是會付錢的又不是沒錢,但是理由還是一堆)
編輯記錄
heartgame0 重新編輯於 2009-10-28 22:38:56, 註解 無‧
christie
資深會員


發表:30
回覆:299
積分:475
註冊:2005-03-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-10-28 15:35:38 IP:59.125.xxx.xxx 未訂閱
試試,判斷放在
BeforePost
例如
if ....... then
begin
ShowMessage('Sorry, data format error!');
Abort
end;
===================引 用 lasterliu 文 章===================
P.D大大您好:
首先謝謝大大的回覆,小弟有個疑問?
若是要進行儲存動作而進行以下判斷,是OK的。
但是若是還沒有要儲存,只是再DBEdit中編輯完跳下一個物件,它自動會回寫DB,進而跳出錯誤,
那我應該是要將此判斷寫在哪個事件中呢?

===================引 用 P.D. 文 章===================
如果要採用第二種, 想要有中文的錯誤訊息可以用以下方式
try
輸入你要的判斷, 或者存檔指令, 如 post, commit
except
on E:Exception do begin
ShowMessage(pChar(E.Message #13 '你自己的中文訊息'))
end;
end;

註:EMessage 是會秀出原來Delphi內建的錯誤英文訊息, 可加可不加)
===================引 用 lasterliu 文 章===================
第二個:
就是依靠後端資料庫進行判斷,但不知該再哪攔截此錯誤訊息,才可將訊息中文化,小弟是使用ADOQuery元件,有試過在EditError、PostError Event中攔截,但都無效,也煩請大大指導一下,謝謝。

如有錯誤的地方或描述不好的地方,敬請告知與原諒,小弟會盡快更正~~^^
------
What do we live for if not to make life less difficult for each other?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-10-28 22:03:18 IP:118.160.xxx.xxx 未訂閱
通常這樣的判斷我會放在 ONEXIT上, 但在這個事件要承擔很大的風險性, 也就是只要離開就會進行, 所以對於是否編輯狀況, 或者其他無關操作中如何避免觸發判斷, 這就由你自己發揮了, 否則到時候動不動就進行判斷, 是很討人厭的!!
===================引 用 lasterliu 文 章===================
P.D大大您好:
首先謝謝大大的回覆,小弟有個疑問?
若是要進行儲存動作而進行以下判斷,是OK的。
但是若是還沒有要儲存,只是再DBEdit中編輯完跳下一個物件,它自動會回寫DB,進而跳出錯誤,
那我應該是要將此判斷寫在哪個事件中呢?
max5020
資深會員


發表:29
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-10-29 10:08:01 IP:59.120.xxx.xxx 訂閱
為何不使用TDateTimePicker ?
lasterliu
一般會員


發表:38
回覆:57
積分:19
註冊:2007-11-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-10-29 16:16:02 IP:65.49.xxx.xxx 訂閱
謝謝各位大大,小弟說一下最後的決定。
最後使用的方法有點類似先將資料INTO至一個暫存資料表。
首先,小弟使用兩個ADOQuery元件
第一個ADOQuery元件進行select,中間的欄位有進行轉換(Convert(NVARCHAR(12),D_C,112) D_C),
再將其欄位格式化為ADOQuery1.FieldByName('D_C').EditMask:='9999/99/99;0;_';
如此一來,即不會馬上寫入DB中,可讓我在最後按儲存時在進行判斷。
第二個ADOQuery元件則進行insert與update。

為何不使用TDateTimePicker ? 因為有些欄位需要可填空值,若使用TDateTimePicker ,即無法達到這要求。

系統時間:2024-04-23 18:04:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!