导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2003/11/18 21:04:28
标题:
加入我的收藏
楼主:
在进行网络数据库系统设计时,能不能完全控制数据的一致性?如我在做销售出库时要减库存,有200条记录,而在减到100条左右计算机断电了怎么办?下一次如果再减,则前一半物品会多减,如果不再减,则后面的物品就少减!这类问题该怎么解决,请各位指教!!
----------------------------------------------
-
作者:
2003/11/18 21:49:28
1楼:
最简单是用ups呵呵哈
----------------------------------------------
bluefire
作者:
bryan (bao)
★☆☆☆☆
-
盒子活跃会员
2003/11/19 19:58:45
2楼:
启动数据库的交易处理就可以了,当然您用的数据库要支持交易才行.
----------------------------------------------
-
作者:
2003/11/21 18:52:38
3楼:
bryan ,交易处理是什么呀???我是刚学的,sql支持交易吗??
----------------------------------------------
-
作者:
bryan (bao)
★☆☆☆☆
-
盒子活跃会员
2003/11/21 19:33:17
4楼:
Sql Server支持交易, 交易处理可以将你的数据处理做为一个整体, 从启动交易开始,你对数据库的修改都被锁定,在未提交交易前这些修改 过的数据都可以理解为暂时的,一旦出现异常(包括断电),交易可以回滚,使 数据恢复到开始交易前的状态. 如果交易完成就既成事实,无法回滚了. SQL Server中的交易是这样写的: begin tran --启动交易 Update table1 set field1='XXXX' where .... Update table2 set field2='XXXX' where .... if @@Error<>0 Begin Rollback tran --回滚交易 raise .... return End Else Begin Commit tran --完成交易 End Delphi 中的语法不太一样,看你用什么连接 BDE: Bdedatabase1.StartTransaction; try 更新语句1... 更新语句2... 更新语句3... Bdedatabase1.Commit; except Bdedatabase1.Rollback; raise exception.Create('error'); end; ADO对应的三个方法如下: ADOConnection1.BeginTrans ADOConnection1.CommitTrans ADOConnection1.RollbackTrans
----------------------------------------------
-
作者:
cjrb (Thinking In 魂)
★☆☆☆☆
-
盒子活跃会员
2003/11/21 19:35:20
4楼:
差不多这样子: ado: adoconnection1.BeginTrans ; try {todo something} except{出错} adoconnection1.RollbackTrans ; end; adoconnection1.CommitTrans ; bde: database1.StartTransaction; try {todo something} except{出错} database1.Rollback; end; database1.Commit;
----------------------------------------------
充电..........
作者:
2003/11/22 15:03:49
5楼:
呵呵,同意cjrb的做法,这是DELPHI的事务处理!
----------------------------------------------