用oracle数据库时,事务和post的疑问,请各位富翁给予指点(在线等待) (50分)

Z

zuocg

Unregistered / Unconfirmed
GUEST, unregistred user!
我在学习delphi过程中发现如下问题(我用的是delphi6.0+oracle8i):
我在程序中做了一个界面,我首先打开此界面然后将
某个字段的值修改并调用post;然后关闭此窗口,我去数据库中查看发现此字段值并未被修改,
然后我再次打开此窗口,发现它显示的是修改后的数值;如果我调用完post,再调用commit则
数据才被真正写回数据库中;请帮忙解答此问题并指点post和commit的区别(是不是数据更新时必须调用commit才可以)。

 
可能是你的程序中用了事务吧!
 
谢谢t365的回答,我再补充一下,
1、我用的是ADO,修改数据后调用post,发现数据未真正写回数据库,可是当我再次打开此窗口
时显示的却是更新后的值;然后我没有调用begintrans,而是直接调用了committrans数据才真正写回数据库;
2、编写数据库程序数据库更新时是不是必须用事务呢?
3、post和事务的区别及用法
 
oracle调用commit才真正提交数据,
 
我还想请问一下,如果说oracle是调用commit才真正更新,那么我调用完post,不调用commit
然后将窗口关闭,再打开此窗口为什么却显示更新后的数据而不是原数据呢?(什么关闭再打开table和
refresh方法我都试了,没用)。请高手指点!
 
那你是怎么发现数据未真正写回数据库的???
 
建议你用缓存更新
BeginTrans;
try
adodataset1.UpdateBatch;
CommitTrans;
except
RollbackTrans;
 
Oracle对每一个Session都会产生一个事务,当然Post修改后,同一Session中可以看到修改结果,
而其他Session(我去数据库中查看)是看不到这些结果的,只有当你Commit以后才行。好像Sybase
和SqlServer都不用显式的Commit,但Oracle是需要的。
 
我用的是ADO不是BDE;
1、我想知道post是不是对不同的数据库有不同的作用?对于ORACLE它并未真正的更新数据,
那么为什么我调用post后,再打开此界面时,显示的却是更改后的数据而不显示原来的数据,
如果可以怎么实现?
 
照这么说,应该是更新了数据了.
Grape 说的在理, 我在以前的项目中,感觉就是这样...
 
非常感谢各位的参与指点,我想我们在理解上不太一致,我重新描述下我的问题:
我用delphi6+oracle8通过ADO进行数据库编程;我做了一个界面,上面我用的是TABLE和GRID显示
,当我修改了表格的某个字段数据后,将焦点移到下一行(相当于调用了post);然后我把此
界面关闭,然后再打开发现数据显示的是修改后的;此时我到数据库中去查,发现数据并未被
更新,还是以前的;如果我把整个程序都退出然后再进入,打开此界面发现显示的原来的数据
(未被更新);
我想知道:1、调用post后数据实际并未被写回到数据库中,为什么再次打开此界面显示的
却是修改后的数据,而不显示原来数据
2、是不是oracle和其它数据库在更新数据上不太一样,(如:必须启用事务,而其他数据库不这样)

 
对于大型数据库post并不将数据写入服务器,只在事务提交后才会写入,
不管你有没有显示调用一个事务,数据库都会给你默认一个事务。
而对某些小型数据库将其写入。
 
多人接受答案了。
 
顶部