三层中多表的更新(200分)

  • 主题发起人 主题发起人 lw727
  • 开始时间 开始时间
L

lw727

Unregistered / Unconfirmed
GUEST, unregistred user!
ClientDataSet的ApplyUpdates更新一个表的数据(写入新记录,非sql语句更新),要求
在更新的同时向后台的一个表写入相关内容(用SQL语句),要求两表同时添加成功!
 
使用触发器+事务控制
 
设置相关参数,DELPHI会帮你自动完成多表更新。
 
可以在BeforeUpdateRecord事件里面做文章
 
方法1:
生成一个接口,类型为需要事务,在一个method中写入对两个表的更新,
用SetAbort回滚,用SetComputer进行提交。
方法2:生成的接口用支持事务,在更新的过程中手工启动一个事务,然后根据更新的
情况手工进行提交或回滚。
 
AfterUpdateRecord也行
 
感谢上述各位支持
有朋友告诉我可以用表嵌套的方法:
在应用服务端 建立两个 TQuery(Query1,Query2)和两个DataSourceProvider,
其数据集分别对应数据库的table1,table2,这两个Query用一个DataSource连接
,Query1为记录数据的表,Query2为记录日志的表,在前台用DbGrid编辑Query1多对应的
数据集,把Query2对应的数据集手动添加日志记录,在ApplyUpdates Query1时Query2也保存了
我实过但是不行,为什么?
 
建议使用触发器,或者建一个事务把记录数据的表和记录日志的表数据的变更写在一起也可以啊,
(表嵌套是其中一种,实在不行,你就分开写SQL,但要放在同一个事务里);
嘿嘿,应该可以了吧
 
这种情况我通常将处理放到服务器端,建立一个接口。
把你的相应的业务规则写到里面,用事物控制多省事呀。
前台只要调用这个接口就行了。[:D]
 
多谢请问如何在服务端建立接口?
 
建议查看李维大师的书,分布式系统结构
说得很详细的
 
使用觸發器吧!較好的選擇!
 
如果第二个表的内容不是界面输入的而是自动生成的,则采用触发器最简单
否则采用两个TDatasetProvider+两个TClientdataset方式,服务端进行事务处理控制
 
多人接受答案了。
 
后退
顶部