K
kid
Unregistered / Unconfirmed
GUEST, unregistred user!
一个MTS/COM+对象mtsObj1(需要事务)提供一个方法SaveDatas用于更新保存数据,由客户端创建这个对象mtsObj1并调用其SaveDatas方法来保存修改的数据。SaveDatas方法代码如下:
procedure TUpdateCoor.SaveDatas(vDatas: OleVariant;
iMaxErrors: Integer);
begin
try
try
dcomcon.Connected:=True;
cds.Data:=vDatas;
cds.ApplyUpdates(iMaxErrors);
SetComplete;
except
SetAbort;
end;
finally
cds.Active:=False;
dcomcon.Connected:=False;
end;
end;
现在人为产生一个更新数据错误,比如:在客户端修改记录未保存时,先到后端数据库系统里将该记录记变,从而使客户端保存时产生错误。
结果是:客户端出现一个错误提示框,提示:根事务要确认,但事务终止了操作。而我期望的应是这样的错误提示:找不到记录或者已被其他用户更改。
于是我对mtsObj1进行调试,断点分别设在(1)cds.ApplyUpdates(iMaxErrors);(2)SetComplete;(3)SetAbort;
当执行(1)cds.ApplyUpdates(iMaxErrors);先出现一个提示1:“Project dllhost.exe raised exception class EDatabaseError with message 'Record not Fount or changed by another user'. Process stopped. Use Step or Run to continue.”
接着再出现一个提示2:“Project dllhost.exe raised exception class EDatabaseError with message 'Unable to find record. No key specified'. Process stopped. Use Step or Run to continue.”
确定后按F7继续执行,又发现程序不是跳到断点3执行SetAbort,而是继续执行了SetComplete
问题一:为什么不会执行SetAbort;?try ..except..end;
怎么会没有起作用??
问题二:调试中出现的提示1正是我所期待的,但怎么不会反应到客户端,客户端出现的又是另一个提示,这是为什么???
问题三:在MTS/COM+对象中要如何才能捕捉到这些异常并反馈给客户端???
分数不够可以加,请大侠们一定帮我。
procedure TUpdateCoor.SaveDatas(vDatas: OleVariant;
iMaxErrors: Integer);
begin
try
try
dcomcon.Connected:=True;
cds.Data:=vDatas;
cds.ApplyUpdates(iMaxErrors);
SetComplete;
except
SetAbort;
end;
finally
cds.Active:=False;
dcomcon.Connected:=False;
end;
end;
现在人为产生一个更新数据错误,比如:在客户端修改记录未保存时,先到后端数据库系统里将该记录记变,从而使客户端保存时产生错误。
结果是:客户端出现一个错误提示框,提示:根事务要确认,但事务终止了操作。而我期望的应是这样的错误提示:找不到记录或者已被其他用户更改。
于是我对mtsObj1进行调试,断点分别设在(1)cds.ApplyUpdates(iMaxErrors);(2)SetComplete;(3)SetAbort;
当执行(1)cds.ApplyUpdates(iMaxErrors);先出现一个提示1:“Project dllhost.exe raised exception class EDatabaseError with message 'Record not Fount or changed by another user'. Process stopped. Use Step or Run to continue.”
接着再出现一个提示2:“Project dllhost.exe raised exception class EDatabaseError with message 'Unable to find record. No key specified'. Process stopped. Use Step or Run to continue.”
确定后按F7继续执行,又发现程序不是跳到断点3执行SetAbort,而是继续执行了SetComplete
问题一:为什么不会执行SetAbort;?try ..except..end;
怎么会没有起作用??
问题二:调试中出现的提示1正是我所期待的,但怎么不会反应到客户端,客户端出现的又是另一个提示,这是为什么???
问题三:在MTS/COM+对象中要如何才能捕捉到这些异常并反馈给客户端???
分数不够可以加,请大侠们一定帮我。