多个数据库的post?(50分)

  • 主题发起人 主题发起人 zhangc
  • 开始时间 开始时间
Z

zhangc

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在正在做一个财务的系统,需要同时对多个数据库改变和添加,这样就产生
了一个问题,假如有数据库db1,db2,db3,如果对db1.post成功,对db2.post产生
错误,这样系统就会提错退出,这样就造成了数据的不统一。
请教各位大侠如何解决?
 
如果是同一个数据库,可采用事务,如果是不同数据库,事情比较麻烦.
好像没有跨数据库的事务处理.你的db1,db2,db3不会是表吧?
姑且写一下:
DataBase.StartTransaction;
try
post your table.....
DataBase.Commit;
except
DataBase.Rollback;
end;

 
最好懬用主墎/明细数据库可实现多个数据库的更新,但删除较麻烦!
 
没有关系的,你的程序代码一定写错了!
你所说的数据,是指表。
在一个应用中,使用多个表是正常的,应当说:每个post都是相对独立的
没有什么:.....
haha
 
MXT:看清题目
wgzhang:有用吗?
我建议直接用TRANSACTION,就是解决此类问题的
begin transaction
do something
if anyerrorYouDoNotLike then
roolback
else
commit
 
begin transaction
try
post tables(1.2.3...)
except
roolback;
exit;
end;
commit;
 
如果你的表都是同个database的话
就用
database的ApplyUpdates方法。
该方法只有在所列的所有表的Applyupdate成功后才会
存入数据库。不会出现数据不一直的问题。
 
数据提交时出现的错误,
一般分以下两面种
A.
如果是在桌面数据库如:Foxpro、database中这些不存在表间的完整性限制的数据库时是一般是不会出错的。
B.在大型数据库中如:oracle、sybase、sqlserver中对于那些违反了数据库的完整性约束的数据在提交时肯定会出错,出错的原因一般有以下几种:
1、违反了主键值必须唯一的约束
2、主从表之间的主外键约束
3、表中数据项的非空(not null)项约束
4、自己定义的表中数据的检查约束(Check fieldname 符合条件)
对于大型数据库的提交一定要用事务进行管理,且涉及了主从关系有主外键约束的表的提交从表的提交必须是在主表提交成功后才能commit,否则应全部rollback,提醒用户.

zhangc兄如果你的系统后台是oracle大型oracle、sybase、informix、sqlserver
这几种数据库的话,注意了以上五点提交数据时一般不会出错了。

 
transaction 是解决数据一致的最佳方式
 
文件型?CACHED UPDATE不错呀
 
只能使用TRANSACTION,以确保一个完整的交易过程。
 
wgzhang的回答是对的,CJ的回答有问题,commit应在except前,
否则都已经ROLLBACK了,怎么commit?!
另外最后应加 Datebase.EndTransaction;

 
用事务就可以解决了。
最好使用存储过程,这样安全性高,效率高。

如:
DataBase1.StartTransaction;
try
Table1.Post;
Query1.Post
...
DataBase1.Commit;
excpet
DataBase1.Rollback;
end;



 
还有更简单的方法,添加Database1和tabl1、table2...,在table1的AfterPost添加事件:database1.applyupdates([table1,table2...]);
 
多人接受答案了。
 
后退
顶部