時間錯誤問題 |
答題得分者是:st33chen
|
lasterliu
一般會員 發表:38 回覆:57 積分:19 註冊:2007-11-05 發送簡訊給我 |
請問各位大大一個時間偵錯處理問題:
小弟使用ADO元件 DBEditr及DBGrid,有個欄位的型態為smalldatetime,小弟想在此做個偵錯處理。 目前小弟有兩個方向: 第一個: 想在前端進行偵錯,但不知該寫在哪一個事件中,因為輸入格式一不對,離開此欄位就會跳出後端資料庫的錯誤訊息, 有試過在Exit event中進行攔截判斷,但此事件順序好像比較後面,所以不知該再哪個事件中進行偵錯,請各位大大指導一下,謝謝。 第二個: 就是依靠後端資料庫進行判斷,但不知該再哪攔截此錯誤訊息,才可將訊息中文化,小弟是使用ADOQuery元件,有試過在EditError、PostError Event中攔截,但都無效,也煩請大大指導一下,謝謝。 如有錯誤的地方或描述不好的地方,敬請告知與原諒,小弟會盡快更正~~^^ |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
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 發送簡訊給我 |
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 發送簡訊給我 |
如果要採用第二種, 想要有中文的錯誤訊息可以用以下方式
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 發送簡訊給我 |
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 發送簡訊給我 |
不是在onexit嗎,如果沒問題就出去,有問題,如果一定要離開就清空(有其它條件才能空的吧),或不正確就不讓它離開,一定要正確才能離開。
------
資訊業是永遠不能停止學習的行業! 但是進步都只是一點點一點點! ==可以不用理我!因為我的程度只有2成,或許不到!! ==我只會拉拉元件,打打迴圈,打打條件判斷,連連資料庫,rs232送送訊號,印表機簡單列印。 只有寫寫小小的點餐軟體(為何想寫,因為叫人家改的小東西,都ooxx,是會付錢的又不是沒錢,但是理由還是一堆)
編輯記錄
heartgame0 重新編輯於 2009-10-28 22:38:56, 註解 無‧
|
christie
資深會員 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
試試,判斷放在
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 發送簡訊給我 |
通常這樣的判斷我會放在 ONEXIT上, 但在這個事件要承擔很大的風險性, 也就是只要離開就會進行, 所以對於是否編輯狀況, 或者其他無關操作中如何避免觸發判斷, 這就由你自己發揮了, 否則到時候動不動就進行判斷, 是很討人厭的!!
===================引 用 lasterliu 文 章=================== P.D大大您好: 首先謝謝大大的回覆,小弟有個疑問? 若是要進行儲存動作而進行以下判斷,是OK的。 但是若是還沒有要儲存,只是再DBEdit中編輯完跳下一個物件,它自動會回寫DB,進而跳出錯誤, 那我應該是要將此判斷寫在哪個事件中呢? |
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
|
lasterliu
一般會員 發表:38 回覆:57 積分:19 註冊:2007-11-05 發送簡訊給我 |
謝謝各位大大,小弟說一下最後的決定。
最後使用的方法有點類似先將資料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 ,即無法達到這要求。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |