当前小弟碰到一个奇怪的问题,在这里向各位大侠请教。
我做了一个数据录入窗口,填写完用update更新保存。
全部非空列都填写后,是可以保存的。
如果有非空列未填写完,而直接去点击保存,当然也不能update成功。但是奇怪的是,提示update失败,实际上数据库中却保存了符合条件的前几行录入。比如在第n+1行用户有一个必填列未填写而直接去保存,保存时提示update失败,但实际上数据库中却有了前n行数据。然后,这时再把第n+1行全部填写完后,再保存还是提示update失败,这是为什么呢?是不是跟我的数据窗口设置有关?
我用的是informix数据库,事物的autocommit是false。
保存时窗口更新代码是:
if dw_1.update(true,false) <> 1 then
messagebox(保存失败,数据保存失败,请检查填写是否正确!~r~n查看表中每条记录中白色列是否都已填写完毕。)
sqlca.uf_exec_rollback()
end if
建義生新生成一個數據窗口
if dw_1.update(true,false) <> 1 then
messagebox(保存失败,数据保存失败,请检查填写是否正确!~r~n查看表中每条记录中白色列是否都已填写完毕。)
sqlca.uf_exec_rollback()
end if
commit;
可能是你的SQLCA.AUTOCOMMIT 为 True
再仔细看看你的代码,要不重画DW试试
我觉得你的问题,是因为在一下操作数据库的代码中使用rollback和commit对事务处理对象操作不当造成的。建议应该进入debug调试模式,单不走检查问题。
if dw_1.update(true,false) <> 1 then
messagebox(保存失败,数据保存失败,请检查填写是否正确!~r~n查看表中每条记录中白色列是否都已填写完毕。)
rollback using sqlca;
else
select count(*) into :li_i from sb_tkqk where bssj = :is_bssj and jgm = :UserInfo.user_dept and bslxbs = :is_bslxbs;
if li_i = 0 then
insert into sb_tkqk (bssj,jgm,bslxbs)
values (:is_bssj,:userinfo.user_dept,:is_bslxbs);
end if
if sqlca.sqlcode = 0 then
messagebox(成功,数据保存成功!)
commit using sqlca;
dw_1.retrieve(is_czwdbh)
else
messagebox(失败,向申报填开情况表插入记录时失败!)
rollback using sqlca;
dw_1.retrieve(is_czwdbh)
end if
end if
begin transaction,commit transcation,rollback transaction
很多数据库都有这些语句,但不见得有你出现的问题.
估计的可能性:
1.楼主搞错了,可能数据早已存在在表中,与你运行的INSERT无关
2.在执行你的这些语句之前,执行了其它的代码,更改了表的内容,先设置断点,运行到insert时停下,看看表中是否已经存在记录,确定没有后,才运行insert语句,运行完后,再查.
3.PB或数据库的BUG,试试打补丁吧