hur.cn - 华软网

 热门搜索

为何commit后没有效果?

  作者:未知    来源:网络    更新时间:2016/12/15
connect using sqlca;
dw_1.settransobject(sqlca)
dw_1.retrieve()
dw_1.insertrow(0)
if sqlca.sqlcode=0 then messagebox("aa","bb")
if dw_1.update()>0 then
commit using sqlca;
messagebox("成功","数据库更新成功!")
else
rollback using sqlca;
messagebox("失败","数据库更新失败!")
end if 
dw_1.retrieve()
disconnect using sqlca;
所操作的表的字段有初始值。
在执行过dw_1.insertrow(0)可从数据窗口中看到新增的记录行。而且update和commit都没有出错,弹出对话框“数据库更新成功!",可是在第二个dw_1.retrieve()后却没有出现新增的一行,检查数据库中也没有新增记录。不知道哪里出了错?

  sqlca的autocommit属性为false
------华软网友回答------
将dw_1.update(false,true)>0 改为 dw_1.update() = 1 在试一下
------华软网友回复------
有错误,改一下
将dw_1.update()>0 改为 dw_1.update(false,true) = 1 在试一下

------华软网友回复------
代码分开写,分别写到2个按钮的单击事件里
窗口的OPEN事件:
connect using sqlca;
dw_1.settransobject(sqlca)
按钮1:
dw_1.retrieve()
dw_1.insertrow(0)
按钮2:
if dw_1.update()>0 then
commit using sqlca;
messagebox("成功","数据库更新成功!")
else
rollback using sqlca;
messagebox("失败","数据库更新失败!")
end if 
dw_1.retrieve()
disconnect using sqlca;

这样就OK了。


------华软网友回复------
试过了,没有用
------华软网友回复------
怎么能不好用呢?
------华软网友回复------
connect using sqlca;
dw_1.settransobject(sqlca)
dw_1.retrieve()
dw_1.insertrow(0)

dw_1.accepttext()

if dw_1.update()>0 then
commit using sqlca;
         
messagebox("成功","数据库更新成功!")
else
rollback using sqlca;
messagebox("失败","数据库更新失败!")
end if 
dw_1.retrieve()
disconnect using sqlca;

------华软网友回复------
虽然我不太明白为什么要把这一段代码分成两个事件中进行处理,但还是照办了。修改后问题依然存在。
不知是否有其他需要注意的地方而我没有注意到?请指教
------华软网友回复------
dw_1.accepttext()也试过了,依然无用。

------华软网友回复------
代码中,执行到dw_1.insertrow(0)的时候,数据窗口插入一行,此时,得通过键盘向该行输入数据。
如果把所有代码写在一个按钮中,那么,当执行dw_1.insertrow(0)后,继续执行下面的代码dw_1.update()>0。这相当于向数据库插入了一个空行(提示保存成功),然后在检索,当然检索不出数据了。
把代码分开,当点按钮1的时候,数据窗口出现新的一行,向该行输入数据,然后点按钮2,进行保存。
------华软网友回复------
应该是commit work;
------华软网友回复------
insertrow(0)之后若没有为其赋值的话是不会写入数据库中的,插入数据窗口的只是一个空行,没有数据,不会提交给数据库的.
------华软网友回复------
有可能跟数窗的更新属性有关。你调换下更新属性多试几次,
------华软网友回复------
我设计的表结构中每个字段都有默认值,所以insertrow(0)执行后插入数据窗口的并不是一个空行。执行过该语句后,数据窗口中已经可以看见该新增记录,只是在update()后不知何故没有写入数据库
------华软网友回复------
是数据窗口中字段的默认值还是数据库中建表时的默认值?
------华软网友回复------
数据库中的字段的默认属性是不会影响到数据窗口中用insertrow()插入的行的,要么自己手工输入值,要么用setitem()赋值,数据窗口的新插入的行才有数据,其状态标志才会由new!变为NewModified!,执行update时才会产生提交到数据库的语句.
------华软网友回复------
在数据库的表里的每个字段设置默认值,当你执行insertrow(0)操作时,并没有对数据库表操作,怎么能在数据窗口里看见新增数据呢?
------华软网友回复------
我是设置的数据窗口中字段的默认值(initial value),而不是数据库中建表时的默认值.
执行insertrow(0)操作时,能在数据窗口里看见新增数据记录,commit语句执行后却无效果.
是否是因为在数据窗口中设置字段的初始化值,并不能导致新纪录的真正填充?可是为何在数据窗口中却
可以看见该记录?
------华软网友回复------
提示提交成功了?那检查一下数据库表中是否有相应的数据。
------华软网友回复------
update()的返回值是什么呢?
------华软网友回复------
update()返回值为0。
请看我上面所贴代码。可以运行到提示“数据库更新成功!”
------华软网友回复------
使用sqlca.sqlcode检查,每一步都正常执行了.可就是完毕后检查数据库,却没有新记录.
   现在我怀疑是因为insertrow(0)了一个空记录。可是在数据窗口画板中我已经为该表的每一字段都设置了initial value,而且在insertrow(0)后在数据窗口控件中也显示了该新增记录。
   请各位兄弟指教

刚才用setieem()新增了一条记录,结果成功新增,看来就是由于insertrow(0)了一条空记录的缘故。可是为什么在数据窗口控件中也显示了该新增记录呢?initial value没有作用吗?
------华软网友回复------
insertrow后就会显示新记录,要保存的话还是SETITEM一下吧
------华软网友回复------
谢谢各位      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。