Midas3 + MTS, 如何使用MTS的事务链处理功能?(100分)

  • 主题发起人 主题发起人 coder
  • 开始时间 开始时间
C

coder

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi5中,服务端使用MTSDataModule,
如何在服务端和客户端使用MTS的事务链处理功能?
欢迎任何建议和示例!
mailto: delphicoder@21cn.com
 
好象,记得,似乎,要在MTS服务器里加入这个OBJECT的吧?
 
In Delphi 5 , the example given:
olecheck(Tconnectserver.appserver.objectcontext(clsid,iid,interface))
I have not try it.
But I have failed when I deal with the local database!
 
hehe,do
es mts support the local database? Ido
ubt it:-)
 
在DELPHI5中使用MTS,如果使用标准的连接方式,如
QUERY-DATASETPROVIDER,DCOMCONNECTION-CLIENTDATASET
将直接享用MTS的事务处理功能。
如果需要更新多表,而且要求更新保持在同一事务中,必须使用自己的中间层函数
来处理。例如,将CLIENT端的DATA发至MTS,
procedure UpdateMTable(ClientData1:OleVariant,Clientdata2:OleVariant);
begin
try
Provider1.data := ClientData;
Provider1.ApplyUpdates(0);
Provider2.data := ClientData;
Provider2.ApplyUpdates(0);

setcomplete;
except
on Exceptiondo
begin
SetAbort;
Raise;
end;
end;
end;

这样处理将保证更新操作在一个事务中。事务的上下文由MTS来
维护。
 
好象WEIC的只能处理单服务的。
 
谁说用了QUERY-DATASETPROVIDER,DCOMCONNECTION-CLIENTDATASET就
直接享用MTS的事务处理功能?MTS实现的是两阶段的提交,并且允许在不同
数据库服务器上实现事务,并不是说在数据库服务器上用了transaction就是
MTS的事务!即使你在数据库服务器上用了transaction,MTS仍然可以将其
Rollback掉!
有两种方式可以控制MTS的事务,在DEIPHI的develope guide中有明确说明,
归跟结底,必须先创建MTS的ObjectContext, 然后在ObjectContext中创建
MTS的Component!在完成事务中的所有工作后,用EnableCommit提交事务。
 
to zc:
zc 说的完全正确。
但是怎么使用objectContext呢?例如:在服务器端一个MTS OJBECT里,
调用几个MTS OBJECT,并让他们参与事物呢?,请用代码详细说明,谢谢!
 
强烈建议关于midas3的新东东如状态无关,连接池等发表高见!!!
 
使用BDE还是ADO,BDE对MTS的事务支持有问题(我一直都没法回滚事务)。
最好使用 ADO+SQL Server。
To yaojian, zc: 事务环境在对象没有激活期间是不能访问的,只有创建子对象
采用ObjectContext.CreateInstance才可以共享事务(COM+环境下直接创建也可)。
weic的方法可以保证事务完整,但是乎还是分成多个方法或对象处理更好一些,保证
事务完整性并不像想象中的那么难(我觉得更容易了)。
 
多人接受答案了。
 
后退
顶部