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

請教一段關於ClientDataSet的程式碼,在斷線後再連線會出現非預期錯誤

答題得分者是:speedup
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-23 18:51:59 IP:203.67.xxx.xxx 訂閱
各位好:

小弟最近維護一個程式,由於用到的是分散式架構的技術
之前並沒有使用過這種技術,因此想請教一下對這方面比較熟悉的前輩..

程式原則是:如果網路正常連線,則利用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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-01-23 22:01:43 IP:61.222.xxx.xxx 訂閱
應該是透過 SocketConnection 吧,用DCOM可能會改善。
這就是Delphi 三層令人吐血的地方。

也就是寧願用三層的概念自己寫,也不要用MIDAS的技術。
實際運用上線會出人命地。

建議最好是 Socket 那一層自己改寫。
雖然如此也不應該在攔截 open時的錯誤。
原則上最好是使用時才Connect 。比較不會出錯。
因為雖然網線拔除再重插,但網路通道已經連結。
當拔除時會通知 AP Server 。因此會出現這種錯誤!(我猜的)
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-01-29 17:08:50 IP:220.135.xxx.xxx 訂閱
關於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;

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