三层结构如何进行事务提交(100分)

  • 主题发起人 主题发起人 dgn
  • 开始时间 开始时间
D

dgn

Unregistered / Unconfirmed
GUEST, unregistred user!
var i:integer;
ErrorCount:integer;
sql:string;
begin
ErrorCount:=0;
SocketConnection1.Connected:=true;
SocketConnection1.AppServer.begin
trans;
dataset1.close;
dataset1.CommandText:='select * from easetd';
dataset1.Open;
for i:=1 to dataset1.RecordCountdo
begin
sql:='insert into test(tdh)' ;
sql:=sql+' values('+''''+dataset1.fieldbyname('提单号').AsString+''''+')';
dataset2.Close;
dataset2.CommandText:=sql;
try
dataset2.Execute;
inc(ErrorCount);
dataset1.MoveBy(1);
except
ErrorCount:=0;
break;
end;
end;
if ErrorCount>0 then
SocketConnection1.AppServer.RollBack
else
SocketConnection1.AppServer.committran;

SocketConnection1.Connected:=false;
dataset1.close;
dataset2.close;
end;
意图,除非所有记录正确添加入数据库,否则提交取消
运行这行命令时出现以下错误信息:
'method 'begin
trans' not supported by automation object'
另外这样处理行得通吗,如不行请如何实现
 
你可以在服务器端定义一个接口,之后在客户端引用这个接口
具体的是该接口存在两个过程,一个函数
函数就是
result := adoconnection.begin
trans ;
两个过程为
adoconnection.committran ;
adoconnection.rollback ;
这样客户端就可以直接的调用这个接口中的函数和过程了
 
1.远程数据模块(RemoteDataModule)没有直接提供事务处理能力.
需要另写代码.你可以增加几个诸如begin
trans,committran,RollBack的方法.
2.建议使用MTS DataModule(或Transactional Data Module)
 
smokingroom说的对,要用事务管理,就用Transactional Data Module,转COM+好
 
客户端不具备事务功能,可以通过Carson_zzd的方法,在应用端建立过程.
或都是调用应用端,使处理在应用端处理.
要不就用MTS
 
客户端没有事物功能,服务器端用 Transaction Data Module 或 Transactional Object
其中用
SetAbort
setComplete控制事物的提交和回滚
通过设置对象事物级别,控制事物的状态
建议你看看书
 
奇怪,我的delphil6.0上找不到MTS DataModule,只有RemoteDataModule,
Transaction Data Module,corba datamodule,????
 
To dgn:
你可以在DataSnap中看到你需要的东西
 
To 中原:
DataSnap又在那呢,我在delphil中找不到,请详细说一下
 
后退
顶部