最近霉运,有个巨烂的项目要我维护。
发现一个奇怪的问题:
比如在程序中有这么一段代码
id:=100
with query1 do
begin
close;
sql.clear;
sql.Add('delete from ININFO where INID='+''''+Id+'''');
execsql;
end;
在Delphi中程序Run运行,
a.假设在数据库ininfo表中有这么条Id=100的数据,那么该条数据应该被删除。
但是很奇怪的是在Run没有退出时,在后查询数据时,该条数据还是存在的。
直到程序退出,数据库才变化。
b.单步调试时,该语句段已经执行后,我如果在Delphi中Run->program reset,
数据库中不会有任何变化。
这是为什么?
后台数据库是Oracle,以前是Sql server是好像没这种情况?
或者是Database中是不是要设置什么?(程序不是我编写的)
发现一个奇怪的问题:
比如在程序中有这么一段代码
id:=100
with query1 do
begin
close;
sql.clear;
sql.Add('delete from ININFO where INID='+''''+Id+'''');
execsql;
end;
在Delphi中程序Run运行,
a.假设在数据库ininfo表中有这么条Id=100的数据,那么该条数据应该被删除。
但是很奇怪的是在Run没有退出时,在后查询数据时,该条数据还是存在的。
直到程序退出,数据库才变化。
b.单步调试时,该语句段已经执行后,我如果在Delphi中Run->program reset,
数据库中不会有任何变化。
这是为什么?
后台数据库是Oracle,以前是Sql server是好像没这种情况?
或者是Database中是不是要设置什么?(程序不是我编写的)
解决方案 »
- 大家好,请问fastreport的预览窗口在打开时如何刷新?
- 请问有关程序中帮助文件的问题
- 怎样驱动扫描仪,把扫描结果导入数据库中?
- 如何设置一个dxDBGrid 的合计栏,请有使用过该控件的兄弟来拉我一把
- 救命啊,急急急!关于视频和音频播放几Timer的问题?
- 请大虾看看这个程序段:我想要删除一个键值,可是却删不了,请大家看看,哪里不对?
- xt_delphi小兄弟,没有在这里玩过,有一个帖子结贴时把分都加给我.弄的我都.....散分散分,希望大家原谅
- 怎么增加可以选择的默认发送邮件的程序?
- 关于TreeView的子节点动态建立问题?
- 新手常遇到的,书上有没有讲的问题
- 如何获得其他应用的显示框的区域?
- fastreport中设计好的frf文件,当数据超过一页时,它为什么把多的数据还是放在第一页。
sql.Add('delete from ININFO where INID='+''''+Id+'''');
你的id是integer,怎么与string相加?
在程序正常中止时,执行类似于:
DataBase1.StartTransaction(开始事务) 的语句,在程序正常中止时,执行类似于DataBase1.Commit(提交事务)的语句。若事务打开,只有在Commit后数据才真正更新,否则数据库会RollBack(回滚)。
使用Run->program reset菜单程序为异常结束,所以数据没有被更新,你看看是不是这么回事。拿分来:)
这是我举的一个小例子,写错了,不好意思。不过这不是主要的。
to 008009(竹杖芒鞋轻胜马,一蓑烟雨任平生):
应该不用的。
to rabbit1125(兔子):
对于b可能可以这样理解。(事实我以前在后台是Sql server时,好像没这种情况,执行Sql语句,数据库就有变化。)
对于b我想不能这样理解,我是在Delphi在Run应用程序,明明已经有提示信息‘删除成功’,但数据库没有变化,直到应用程序正常退出。
请指教。多谢。