pb 想在datawindow里使用数组插入数据库中,用循环来代替游标,但是有时插入的数据不完整。请各位大佬帮忙看看

qq_43589674 2019-05-17 01:31:29
decimal r_jfje[10],r_dfje[10],r_jfje2,r_dfje2
integer i=1
do

r_zy[i] =string(dw_zw_pzmxb_grid.object.zy.current)
r_km_code[i] =string(dw_zw_pzmxb_grid.object.km_code.current)
r_jfje[i] =dec(dw_zw_pzmxb_grid.object.jfje.current)
r_dfje[i] =dec(dw_zw_pzmxb_grid.object.dfje.current)

messagebox('','1')

if isnull(r_zy[i]) or isnull(r_km_code[i]) or (r_jfje[i]=0 and r_dfje[i]=0) then
messagebox('','2')
messagebox('提示','请将凭证明细表第【' +string(i)+'】排填制完整')
delete from zw_pzmxb where zth=:r_zth and ykjqj=:r_ykjqj and nkjqj=:r_nkjqj and pzh=:r_pzh;
exit
end if
insert into zw_pzmxb (zth,nkjqj,ykjqj,pzh,km_code,zy,jfje,dfje)
values (:r_zth,:r_nkjqj,:r_ykjqj,:r_pzh,:r_km_code[i],:r_zy[i],:r_jfje[i],:r_dfje[i]);
i=i+1
loop until i>r_row



if i>r_row then
declare C_cur cursor for
select zth,nkjqj,ykjqj,pzh,km_code,zy,jfje,dfje
from zw_pzmxb where zth=:r_zth and ykjqj=:r_ykjqj and nkjqj=:r_nkjqj and km_code like:r_km_code[i - 1]
and pzh=:r_pzh;
open C_cur;
do while r_flag=true
fetch C_cur into :r_zth2,:r_nkjqj2,:r_ykjqj2,:r_pzh2,:r_km_code2,:r_zy2,:r_jfje2,:r_dfje2;
...全文
342 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DYFDWX 2019-06-05
  • 打赏
  • 举报
回复
这样做风险大,建议用datastore来做,删除与新增,这样好处理是做到事务处理
whb00120012 2019-06-04
  • 打赏
  • 举报
回复
一是表应该为一对多的;
二是
r_zy[i] =string(dw_zw_pzmxb_grid.object.zy.current)
r_km_code[i] =string(dw_zw_pzmxb_grid.object.km_code.current)
r_jfje[i] =dec(dw_zw_pzmxb_grid.object.jfje.current)
r_dfje[i] =dec(dw_zw_pzmxb_grid.object.dfje.current)

current传的是一个数组
三是 循环应在messagebox('','1') 后面。
qq_43589674 2019-05-26
  • 打赏
  • 举报
回复
引用 1 楼 WMERP 的回复:
你再写这些批量处理的SQL语句最好是批量的提交和回滚,防止错误而造成部分提交:
SQLCA.AUTOcommit=FALSE

do
..........
SQL语句执行
if sqlca.sqlcode<>0 then
messagebox "ERROR"
goto error
end if
........
loop

commit using sqlca;
sqlca.autocommit=true
return 1
:error
rollback using sqlca;
sqlca.autocommit=true
return 0
好的 谢谢
WMERP 2019-05-17
  • 打赏
  • 举报
回复
你再写这些批量处理的SQL语句最好是批量的提交和回滚,防止错误而造成部分提交:
SQLCA.AUTOcommit=FALSE

do
..........
SQL语句执行
if sqlca.sqlcode<>0 then
messagebox "ERROR"
goto error
end if
........
loop

commit using sqlca;
sqlca.autocommit=true
return 1
:error
rollback using sqlca;
sqlca.autocommit=true
return 0

1,108

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧