請教一段關於ClientDataSet的程式碼,在斷線後再連線會出現非預期錯誤 |
答題得分者是:speedup
|
stonys
初階會員 發表:64 回覆:111 積分:38 註冊:2002-09-28 發送簡訊給我 |
各位好:
小弟最近維護一個程式,由於用到的是分散式架構的技術 之前並沒有使用過這種技術,因此想請教一下對這方面比較熟悉的前輩.. 程式原則是:如果網路正常連線,則利用ClientDataSet取得遠端資料庫資料,如果網路連線不正常則利用本地端資料庫作判斷 而錯誤產生是,當我將網路線拔除後再插回,理論上應該要取得遠端資料庫資料 (因為網路連線正常) 但是程式卻會出現例外,試過BDE/ADO在這種狀況都可以正常取得遠端資料 因此推測是ClientDataSet 的問題 想請教各位前輩,不知道我的推測是否正確? 又..如果我的推測正確,能否有解決的方法 程式碼片段如下,請各位前輩不吝指教。謝謝! [code delphi] if tmpnet <> 'n' then begin LB1.Visible := false; try DataModule1.ClientDataSet1.Close; DataModule1.ClientDataSet1.CommandText := 'SQLSTR'; DataModule1.ClientDataSet1.Open; entry1 := DataModule1.ClientDataSet1.recordcount; if (entry1 > 0) and (DataModule1.ClientDataSet1.FieldByName('end_date').Value >= date()) then entry1 := 1 else entry1 := 0; DataModule1.ClientDataSet1.Close; DataModule1.ClientDataSet1.CommandText := 'Select * from XXXX'; DataModule1.ClientDataSet1.Open; //例外發生,網路不通出現錯誤訊息 except begin ShowMessage('網路連線錯誤,將改用本地端資料庫,請重新輸入証號'); DoorDataModule.net := 'n'; LB1.Visible := true; exit; end; end; [/code] |
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
|
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
關於ClientDataSet 的錯誤處理請在OnReconcileError處理,在Delph 5 以後的版本,ClientDataSet 在異動資料失敗時並不會觸發Exception 而是觸發OnReconcileError事件,因此如果你只單純處理例外 可能 無法發現原因
procedure TForm1.ClientDataSet1ReconcileError( DataSet: TCustomClientDataSet; E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction); begin ShowMessage('The Real Error is:' E.Message); Action:=RaCancel; end;
------
唉~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |