本人用delphi5+BDE+sql server2k+borland socket開發三層的應用系統。
應用服務器端使用普通的master-detail主從關系連接表﹐使用TDataSetProvider,屬性設置如下﹕
[poCascadeDeletes,poCascadeUpdates,poAutoRefresh,poAllowCommandText] 在服務器端的Query控件和TDatasetProvider控件的UpdateError事件過程中設置錯誤處理代碼如下﹕
procedure UpdateError(Sender: TObject;
DataSet: TClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
var Response: TResolverResponse);
var EDBError: EDBEngineError;
begin
try
if E.ErrorCode <> 0 then
if (E.OriginalException is EDBEngineError) then
begin
EDBError := (E.OriginalException as EDBEngineError);
if UpdateKind = ukInsert then Response := RrAbort;
if UpdateKind = ukModify then Response := RrSkip;
if UpdateKind = ukDelete then Response := RrIgnore;
end
else
Response := RrAbort;
except
end;
end; 問題﹕
1.當客戶端用tclientdataset提交數據時﹐若有錯誤出現﹐在上述過程中設置斷點﹐根本就沒有觸發事件。不知我的做法有何不妥﹐請指教。
2.當客戶端有如下操作時﹐應用服務器會異常關閉(嚴重﹐所有客戶端應用都被中斷):
在一個主表記錄中﹐主鍵keyvalue='A102',明細記錄存在多條如下﹕
主鍵值 客戶編號 客戶名稱
a. 200310 C102 匯創
----------------------------------
b. 200310 C103 科源
... 其中﹐主鍵值+客戶編號為組合關鍵字。
在刪除b記錄后(主表未提交)﹐再增加一條記錄,內容的與被刪除的b記錄完全一樣﹐此時提交主表applyupdates(-1)。將會導致應用服務器常時間沒法反應﹐或應用服務器程序出錯誤并退出。 請有高手指點﹐如何才能正確地在應用服務器中處理異常。
另﹕請高手們提出開發應用服務器中你自己的開發方法。
暫時只能送100分﹐不足的另開一貼給分。
應用服務器端使用普通的master-detail主從關系連接表﹐使用TDataSetProvider,屬性設置如下﹕
[poCascadeDeletes,poCascadeUpdates,poAutoRefresh,poAllowCommandText] 在服務器端的Query控件和TDatasetProvider控件的UpdateError事件過程中設置錯誤處理代碼如下﹕
procedure UpdateError(Sender: TObject;
DataSet: TClientDataSet; E: EUpdateError; UpdateKind: TUpdateKind;
var Response: TResolverResponse);
var EDBError: EDBEngineError;
begin
try
if E.ErrorCode <> 0 then
if (E.OriginalException is EDBEngineError) then
begin
EDBError := (E.OriginalException as EDBEngineError);
if UpdateKind = ukInsert then Response := RrAbort;
if UpdateKind = ukModify then Response := RrSkip;
if UpdateKind = ukDelete then Response := RrIgnore;
end
else
Response := RrAbort;
except
end;
end; 問題﹕
1.當客戶端用tclientdataset提交數據時﹐若有錯誤出現﹐在上述過程中設置斷點﹐根本就沒有觸發事件。不知我的做法有何不妥﹐請指教。
2.當客戶端有如下操作時﹐應用服務器會異常關閉(嚴重﹐所有客戶端應用都被中斷):
在一個主表記錄中﹐主鍵keyvalue='A102',明細記錄存在多條如下﹕
主鍵值 客戶編號 客戶名稱
a. 200310 C102 匯創
----------------------------------
b. 200310 C103 科源
... 其中﹐主鍵值+客戶編號為組合關鍵字。
在刪除b記錄后(主表未提交)﹐再增加一條記錄,內容的與被刪除的b記錄完全一樣﹐此時提交主表applyupdates(-1)。將會導致應用服務器常時間沒法反應﹐或應用服務器程序出錯誤并退出。 請有高手指點﹐如何才能正確地在應用服務器中處理異常。
另﹕請高手們提出開發應用服務器中你自己的開發方法。
暫時只能送100分﹐不足的另開一貼給分。
解决方案 »
- tclientdataset传输数据时出现mismatch in datapacket问题
- 急,请大虾指点!
- 求助用ADOQUERY实现主从表缓存的实例,分如果不够可以再加
- 请教一小问题,急!
- 线程结束问题-----高分求解!!!!!!
- DataMoudle的问题
- 大家救命呀!小弟在作统计时遇到麻烦了~~~~~
- delphi高手们,请问如何接收另一个应用程序发来的自定义My_Msg_StkData,并响应函数OnStkDataOK()?给分!!!
- 好像没那么简单? 我好像想简单了:)! to: 一个简单的问题,怎样写这个函数呢?
- 急急急,用combobox的items属性里的纪录,为何查询不到的内容?
- RMMachine中RMRichView的问题
- 高分相送
一般来说你没有必要在服务器端处理异常,你可以在客户端写一个统一的ONERROR事件,动态指给在招待更新动作的CDS;让他来处理;因为你的applyupdates(-1)参数是-1所以所有错误都应该拿给客户端;在刪除b記錄后(主表未提交)﹐再增加一條記錄,內容的與被刪除的b記錄完全一樣﹐此時提交主表applyupdates(-1)。將會導致應用服務器常時間沒法反應﹐或應用服務器程序出錯誤并退出?
你的后端如果是SQL-SERVER,有中能会产生交易锁死;你应该把表提交后再执行,如果需要交易建议成批SQL;D的MIDAS在提交更改时,D5不能完全将PROVIDERFLAG传来服务器,必须自己实现(估计是BUG,也可能是我看错了),最要自己在中间层来实现数据提交;通常的提交定位都是用KEY
但MIDAS默认用WHEREALL。这样很容易产生并发错误;希望对你有所帮助;