什么是事务的提交?(33分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
两层。
步奏:
1)在事务未提交前,Tdataset.post;
(有人说现在sql server中已经有数据)
2)commit;
我以前认为commit前sql server中不会有数据的。。。。。。。。。。。

 
问题好像不太明白

事务的提交在Delphi里是这样的:

database1.StartTransaction;
try
table1.post;
...
database1.Commit;
except
database1.Rollback;
end;
 
千中元﹕

好久不見了﹐我現在畢業在外打工﹐現在東莞﹐這是一家很大的台資廠﹐我們在

用delphi和sql server寫生管系統和物料系統﹐兩階的﹐下一步准備改三階。

千兄現在可好?

沒有提交東西當然不會記到庫里去

你的問題我就不詳細說了﹐有班門弄斧之賺

call 我﹕(0769)94932-854620
e_mail:qjwlq@sina.com

。。。

打工千萬別找台灣佬﹐我現在一天到晚被老大罵 :-<
 
to 冰川,
“我以前认为commit前sql server中不会有数据的”,现在有个老大说有没提交的
也在sql server里,我有点晕,是不是真的啊?如果那样,我回头重新学delphi.
to wlq,
换邮箱了?
嘿嘿,等攻打台湾的时候找他算帐。
 
确实会预写入库,不过用rollback可以取消.不信可以按下例试一试.
先执行下三句
begin tran
insert into aaa(b) values ('bbb');
select * from aaa
有结果
再执行下两句
rollback
select * from aaa
无结果.

 
如果忘了commit,也没rollback,还有数据?
 
那就要看事务中止时的提交设置了,一般来说会rollback.
 
按某种说法: BDE中要把sharedautocommit改为sharednoautocommit.
我也没试过,但我一般都是sharednoautocommit。
在千兄前班門弄斧,见笑!
 
access 未post 就commit是不能提交数据的.
 
看来只有在有空的时候再把各种情况试验下了。
post ,但故意不commit.数据有无?
 
千同志啊,别这样:
1、不同数据库处理事物的方式是不同的,有的甚至不支持;
2、就MSSQL而言,数据是先预入库,但是,此操作是可逆的,操作会被保存在一个缓存中;
一般说,未COMMIT会出错!以外中指程序会ROLBACK,SERVER以外鼓掌也会ROLBACK
 
To CJ:
什么叫“鼓掌也会ROLBACK”?
 
我做过试验,mssql7中未提交前会有数据,但如不提交,有时数据的变化会令你莫名其妙,所以最好
提交
 
TdataBase有个方法 StartTransaction ,调用后,进入显式事务,在调用前,用
TdataBase的InTransaction属性 Check一下是否有正在进行的事务,如果没有,则调用
starttransaction开始一个新事务,事务只到调用commit 或 rollback 结束,否则
又开始一个新事务就会产生异常,这是显式事务。如果不显式调用Tdatabaes的
starttransaction,则Delphi用隐式事务控制数据,隐式事务在Delphi中用得极为
普遍,Table的 Delete Post 都是在隐式事务的控制下,(前提是没有调用Tdatabase
的starttransaction〕,因此,post之后,Sql server是一定会有数据的,否则要么是
程序写错了,要么是盗自版软件,如果是Sql server的问题,那你就发大财了,可以向
微软起诉,我做了那么多程序,二层的程序用显式事务是不多的,三层的其实也不多,
因为大部分工作都能在隐式事务下很好的完成,除非写大型的而且逻辑相当复杂的
程序,为了取得较好性能,以及不使用显式事务就完成不了业务逻辑的情况下才使用,
然而,程序相对来说就难写了,老板要是不加薪,最好还是隐式事务算了。
各位老兄老弟,多看看帮助吧。
 
一般只有客户服务器模式的数据库才支持事务处理,普通的数据库如FoxBase系列
和Access是不支持事务处理的
 
接受答案了.
 
后退
顶部