三层结构,如何用事务处理提交主从更新?(200分)

  • 主题发起人 主题发起人 Julien
  • 开始时间 开始时间
J

Julien

Unregistered / Unconfirmed
GUEST, unregistred user!
实现像这样的效果:
Database1.StartTransaction;
try
//从数据库中更新单号表而不提交,用TQuery
//取得单号,然后将单号更新到Master&Detail
Master.ApplyUpdates;
Detail.ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
这样可行吗?
关键是怎样设置使得客户端的更新送到服务端而不提交到数据库中去?
然后怎么样在服务器端编辑数据,然后提交到数据库里去?
 
这样好像不行,事务不能嵌套。master会自起一个事务
 
应该可以用MTS管理,功能强大,可以实现数据库级的事务,
例如:
try
Master.ApplyUpdates;
Detail.ApplyUpdates;
setcomplete;
except
setabort;
raise;
end;

 
什么是Listen?
MTS管理的话需要做哪些事情?是要在应用服务器所在的操作系统里
面上安装一个MTS服务器吧,是否只要安装好了开一个MTS DM使用
netyjj的代码就可以了?还有netyjj的代码是客户端的吗?
先前不知道MIDAS的事务处理这么弱。找到一个李维的MIDAS例子包
在所有的*.pas都搜索不到commit或者setcomplete。
所以拜托各位高手了,这个搞不定手里的东西就不用做下去了,走投
无路的时候直接生成Sql语句送到数据库里面去,再不受这个东西
的气。
 
代码应在应用程序服务器,
并且编写的应用程序服务器,应
添加到MTS的组件包中,
支持MTS的应用程序服务器,可用向导生成。
 
解决这个问题其实不需要用MTS
你可以在SERVER端定义一个方法,接收client传来的所有有更新过的
ClientDataSet的Delta,自己定义一个事务,将更新的信息
递交就可以了
具体可以看D5DG
 
D5DG是什么?
一个例子,还是....
在什么目录下?
 
在d5中TDataSetProvider收到客户的更新要求后应用务服器自动进入交易控制.
不需要我们自己调用StartTransaction来进行交易控制.
 
D5DG指的是Delphi 5 Developer's Guide由原Delphi R&D Team的两位成员完成。一本非常好的书。
首先,你是在客户端使用M-D结构,按照你的做法,肯定不是Transaction。
其实Borland推荐在App Server端做M-D,这样AppServer可以自动完成Transaction。如果是Client端,则要写一些方法,很烦的,不到万不得已我才不会用这么苯的方法。
在Server端建立M-D关系后,只要一个DataSetProvider与主表相连,把Provider的Options改为[poCascadeDeletes,poCascadeUpdates],在其ongettablename事件中:
if DataSet = qryMaster then
TableName := 'Master'
else
if DataSet = qryDetail then
TableName := 'Detail'
在Client端,一个ClientDataset连到相应的Provider上,由于Detail作为主表的一个DatasetField,所以另一个CDS连接到这个DatasetField,保存时
cdsMaster.ApplyUpdate(0)
就可以了,这是标标准准的Transaction,不相信你可以验证,而且也是非常简单的。
 
请问YJC,D5DG何处可买到?拜托?!
 
Amazon.com
You should use US$ .
 
Julien的程序决不是三层,典型的两层结构。
Yjc的方法很好,但只更新主表在插入是没问题,主从都能进数据库
但更新和删除时看起来从表的数据是相应改变,可是只提交主表时从表物理数据不会改动
建议配合触发器使用
 
更新和删除不会不改变的,我一直都在使用。
我厌恶触发器,它具有不可预见的,强烈的副作用。
我估计不能更新的原因可能是某些设置不对。
尤其是每个Field的PROVIDERFLAGS属性。
 
>>在其ongettablename事件中:
if DataSet = qryMaster then
TableName := 'Master'
else
if DataSet = qryDetail then
TableName := 'Detail'
为什吗要加这一段?我的程序没有也行(Delphi 4)
 
请问YJC,D5DG有电子版吗?
可否多多的教我们一些。
 
多人接受答案了。
 

Similar threads

后退
顶部