MTS/COM+对象的2个问题 ( 积分: 200 )

  • 主题发起人 主题发起人 kid
  • 开始时间 开始时间
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+数据模块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+数据模块mtsObj1(需要事务),
一个MTS/COM+对象mtsObj2(支持事务),
 
为什么会出现“根事务要确认”,这个问题还真的回答不来
“数据也确实没更新回数据库”,情况可能不是这么回事
你提交两条,其中一条意料中不成功,然后你可能看到,其中
另外一条确实已经提交了!
 
看看delphi的帮助TCustomClientDataSet.ApplyUpdates下:
Warning: The provider can't detect when an update conflicts with another user's changes to a memo field. The server will not detect and return these conflicts as errors.
 
多人接受答案了。
 
后退
顶部