三层结构,假定客户端看到的是业务逻辑层,业务逻辑层操作数据库的叫数据层。 在给业务逻辑的接口函数中带上错误码和返回值,在数据层截获错误码Raise到上层,上层进行判断,变成自定义的错误码和错误描述。 例:数据层返回错误码 raise Exception.Create(intToStr(self.DBConn.Errors.Item[0].NativeError)); 业务逻辑层 on e:exception do begin 根据E.Message进行操作 self.SetAbort; exit; end;
苹果兄,我也是那样做的呀,下面是我的代码 procedure TErrorMsgDM.GetADOError(out ErrorEnglishMsg, ErrorChineseMsg , SourceMsg, DescriptionMsg: WideString; out NativeErrorMsg: Integer); var adoErrors : Errors ; adoError : Error ; // iCount : integer ; begin adoErrors:=adoconError.Errors ; // for iCount:=0 to adoErrors.Count-1 do // begin if adoErrors.Count=0 then showmessage('没有错误') else begin ShowMessage('有错误'); adoError := adoErrors.Item[0] ; SourceMsg := adoError.Source ; DescriptionMsg := adoError.Description ; NativeErrorMsg := adoError.NativeError ; if not adotblError.Locate('ErrorID',NativeErrorMsg,[]) then begin ErrorChineseMsg:='-100' ; //DescriptionMsg ; ErrorEnglishMsg:='-100' ;//SourceMsg ; end else begin ErrorChineseMsg:=adotblError.fieldByname('ChineseMsg').AsVariant ; ErrorEnglishMsg:=adotblError.fieldByname('EnglishMsg').AsVariant ; end; end; end;但是,当我测试的时候,在客户端插入一条记录,发生主键重复的错误,通过dcomconnection.appserver.getADOError来捕获错误的时候,却捕获不到,我怀疑三层的错误处理机制不是这样的,请教苹果兄
在给业务逻辑的接口函数中带上错误码和返回值,在数据层截获错误码Raise到上层,上层进行判断,变成自定义的错误码和错误描述。
例:数据层返回错误码
raise Exception.Create(intToStr(self.DBConn.Errors.Item[0].NativeError));
业务逻辑层
on e:exception do
begin
根据E.Message进行操作
self.SetAbort;
exit;
end;
procedure TErrorMsgDM.GetADOError(out ErrorEnglishMsg, ErrorChineseMsg ,
SourceMsg, DescriptionMsg: WideString; out NativeErrorMsg: Integer);
var
adoErrors : Errors ;
adoError : Error ;
// iCount : integer ;
begin
adoErrors:=adoconError.Errors ;
// for iCount:=0 to adoErrors.Count-1 do
// begin
if adoErrors.Count=0 then
showmessage('没有错误')
else begin
ShowMessage('有错误');
adoError := adoErrors.Item[0] ;
SourceMsg := adoError.Source ;
DescriptionMsg := adoError.Description ;
NativeErrorMsg := adoError.NativeError ;
if not adotblError.Locate('ErrorID',NativeErrorMsg,[]) then
begin
ErrorChineseMsg:='-100' ; //DescriptionMsg ;
ErrorEnglishMsg:='-100' ;//SourceMsg ;
end
else begin
ErrorChineseMsg:=adotblError.fieldByname('ChineseMsg').AsVariant ;
ErrorEnglishMsg:=adotblError.fieldByname('EnglishMsg').AsVariant ;
end;
end;
end;但是,当我测试的时候,在客户端插入一条记录,发生主键重复的错误,通过dcomconnection.appserver.getADOError来捕获错误的时候,却捕获不到,我怀疑三层的错误处理机制不是这样的,请教苹果兄
这个错误函数是怎么引发的呢?
我是将对数据库的操作放在try中,在except中raise错误码。就像普通的异常处理一样。
看看其它熟悉MIDAS的兄弟怎么说。
总感觉MIDAS的三层不像Windows的DNA架构,有时间找众兄弟讨论讨论。
TClientDataSet.ApplyUpdates 方法其实就是封装了上述的过程。
try
……
IMyAppServer.ApplyDataUpdate(……) ;
……
except
on e: EOleException do
……
end;