K
kid
Unregistered / Unconfirmed
GUEST, unregistred user!
一个MTS/COM+数据模块mtsObj1(支持事务),内有adoconnection,adodataset,datasetprovider三个组件连接到SQL SERVER 2000数据库系统。
一个MTS/COM+对象mtsObj2(需要事务),内有dcomconnection连接上面那个mtsObj1,mtsObj2提供一个方法UpdateDatas用来更新数据。
客户端创建mtsObj2并调用mtsObj2.UpdateDatas方法来更新数据。
mtsObj2.UpdateDatas方法的代码如下:
procedure TUpdateCoor.SaveDatas(vDatas: OleVariant;
iMaxErrors: Integer);
begin
with FDMdo
begin
try
try
dcomcon.Connected:=True;
cds.Data:=vDatas;
cds.ApplyUpdates(iMaxErrors);
SetComplete;
ShowMessage('成功');
except
SetAbort;
ShowMessage('失败');
end;
finally
cds.Active:=False;
dcomcon.Connected:=False;
end;
end;
end;
1、问题一:正常操作,数据能正常更新回数据库,现在人为产生一个数据更新错误:就是客户端修改一个记录,在未保存时先到后端数据库系统里改变该记录,再在客户端点保存,这样就会产生一个更新错误。按说这样子执行mtsObj2.UpdateDatas应会执行到except setabort;
showmessage('失败'),但结果是程序仍会执行setcomplete;showmessage('成功'),但接着就会出现一个错误:根事务要确认,但终止了操作。数据也确实没更新回数据库。这是为什么???
2、在MTS/COM+对象中如何捕捉到象上面那样的数据更新错误并返回给客户端,由客户端来判断如何解决。
一个MTS/COM+对象mtsObj2(需要事务),内有dcomconnection连接上面那个mtsObj1,mtsObj2提供一个方法UpdateDatas用来更新数据。
客户端创建mtsObj2并调用mtsObj2.UpdateDatas方法来更新数据。
mtsObj2.UpdateDatas方法的代码如下:
procedure TUpdateCoor.SaveDatas(vDatas: OleVariant;
iMaxErrors: Integer);
begin
with FDMdo
begin
try
try
dcomcon.Connected:=True;
cds.Data:=vDatas;
cds.ApplyUpdates(iMaxErrors);
SetComplete;
ShowMessage('成功');
except
SetAbort;
ShowMessage('失败');
end;
finally
cds.Active:=False;
dcomcon.Connected:=False;
end;
end;
end;
1、问题一:正常操作,数据能正常更新回数据库,现在人为产生一个数据更新错误:就是客户端修改一个记录,在未保存时先到后端数据库系统里改变该记录,再在客户端点保存,这样就会产生一个更新错误。按说这样子执行mtsObj2.UpdateDatas应会执行到except setabort;
showmessage('失败'),但结果是程序仍会执行setcomplete;showmessage('成功'),但接着就会出现一个错误:根事务要确认,但终止了操作。数据也确实没更新回数据库。这是为什么???
2、在MTS/COM+对象中如何捕捉到象上面那样的数据更新错误并返回给客户端,由客户端来判断如何解决。