多表更新操作的老问题,APPLYUPDATES,请大虾们帮忙解决,欢迎灌水,急!!!!!!!!!!!(难道就没人回答吗???富翁们就不销一顾或者真的都找不到一个

  • 主题发起人 主题发起人 microming
  • 开始时间 开始时间
M

microming

Unregistered / Unconfirmed
GUEST, unregistred user!
多表更新操作的老问题,APPLYUPDATES,请大虾们帮忙解决,欢迎灌水,急!!!!!!!!!!!(难道就没人回答吗???富翁们就不销一顾或者真的都找不到一个真正会的吗?) (100分)<br />查了以前的问题,感觉没有一个比较满意的,所以旧话重提,或我没有看到认为适合我的。
主从结构的更新,前提,设了query的updateobject及cachedupdates了,并且作了关联,关联
字段不是自增长字段
1. Database1.StartTransaction;
try
从表.ApplyUpdates; {try to write the updates to the database};
主表.ApplyUpdates; {try to write the updates to the database};
Database1.Commit; {on success, commit the changes};
except
Database1.Rollback; {on failure, undo the changes};
raise; {raise the exception to prevent a call to CommitUpdates!}
end;
从表.CommitUpdates; {on success, clear the cache}
主表.CommitUpdates; {on success, clear the cache}
2. if Master.UpdatesPending or Detail.UpdatesPending then
if Master.UpdateStatus = usInserted then
Database1.ApplyUpdates([Master, Detail])
else
Database1.ApplyUpdates([Detail, Master]);
但验证过了,Database1.ApplyUpdates([Detail, Master]);须从表排前才可以。不然主
表更新产生从表数据丢失.
这些是DELPHI里的帮助
还有一些保存时把关联赋NIL等.
问题:
采用C/S结构,不用三层结构.
1.如果多个表同时更新该如何操作为好呢?包括主从表或没有作关联的表。
我最近出现了一毛病,症为:Database1.ApplyUpdates([Detail, Master]);即死了没反应。
改为第一种时发现在从表死了。
后来发现如果加了 Database1.StartTransaction;就死了,还要相应把.Commit;Rollback;
去掉,(不加事务传输),不然会出错,程序段为前面为一个从表的DELETE,而后保存applyupdates
,死锁的情况为一个表EDIT,另一个DELETE时,然后一开始事务传输就没反应,用SQLSERVER跟
踪发现是更新锁,STATE 为 WAIT,直到我硬性退出程序,我是在单用户调试的状态下出现这
种问题的也有试过SELECT 加 NOLOCK 等,都没效果。(能不用ADO吗?)
 
难道都只是过路的富翁吗?施舍点吧!
 
什么意思啊!DELPHI的支持把DATASET作为一个字段!既巢状数据表!
用两个QUERY组件!一个连主表另一个连从表,把从表作为DATASET加到主表中!
然后同时更新即可!参见李维的“分布式多层系统应用篇”
第2章1-6小节!
另外注意字段的providerflag属性
关注!
 
StartTransaction后对数据的操作并没有实际存入表中
没有实际存入表中就不会生成自增长字段值
所以用自增长字段值来关联就会产生错误 ^_^

可以想想其它算途径
 
用ADO连接
注意将所有有关表都放到一个事务中处理
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
775
import
I
后退
顶部