表数据更新的问题,下面代码错在那里?在线等待!

海洋‘s 2002-08-27 01:21:05
问题描述:

1.根据用户录入的数据,更新数据表。即:用sle_error1.text,sle_error2.text中的值更新cws1,cws2

2.当sle_error1.text,sle_error2.text中输入错误记录的时候,按下“确定”后可以将该错误数保存到库中;但是当sle_error1.text,sle_error2.text中没有输入的时候,按下“确定”后数据库中保存的是0,而实质 上我要的结果不是0,而是Null值;

3.主要目的是:当sle_error1.text,sle_error2.text中任何一个为空,或者二者都为空的时候,其相应的值 应该是Null,而不是0.
即:当sle_error1.text=“”时,数据库中对应的cws1的值应该是Null
sle_error2.text=“”时,数据库中对应的cws2的值应该是Null
如果sle_error1.text=“”,sle_error2.text=“” 时,数据库中对应的cws1,cws2的值应该是Null

int n_count,li_cws1,li_cws2, i

li_cws1 =integer(sle_error1.text)
li_cws2 =integer(sle_error2.text)

if sqlca.sqlcode= -1 then
Messagebox("提示","确认信息错误",Exclamation!,OK!)
Rollback using sqlca;
//如果录入错误数1和录入错误数2都为空
elseif isnull(li_cws1) or isnull(li_cws1) then

INSERT INTO mng_dbsh(jhid, zybz, lrr1, lrrq1, cws1,
lrr2, lrrq2, cws2,
shr, shrq)
VALUES(:ls_jhid, 'N', :ls_lrr1, :ld_lrrq1, null,
:ls_lrr2, :ld_lrrq2, null,
:ls_shr, :ld_shrq);
//如果录入错误数1为空
elseif isnull(li_cws1) then
Messagebox("错误数1",li_cws1)
INSERT INTO mng_dbsh(jhid, zybz, lrr1, lrrq1, cws1,
lrr2, lrrq2, cws2,
shr, shrq)
VALUES(:ls_jhid, 'N', :ls_lrr1, :ld_lrrq1, null,
:ls_lrr2, :ld_lrrq2,:li_cws2,
:ls_shr, :ld_shrq);
//如果录入错误数2为空
elseif isnull(li_cws1) then

INSERT INTO mng_dbsh(jhid, zybz, lrr1, lrrq1, cws1,
lrr2, lrrq2, cws2,
shr, shrq)
VALUES(:ls_jhid, 'N', :ls_lrr1, :ld_lrrq1,:li_cws1,
:ls_lrr2, :ld_lrrq2,Null,
:ls_shr, :ld_shrq);
else
dw_wsh.ResetUpdate()
dw_ysh.ResetUpdate()
commit using sqlca;

Messagebox("提示","确认信息成功提交",Exclamation!,OK!)

cb_ok.Enabled=false
sle_error1.text=""
sle_error2.text=""
end if
...全文
64 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
海洋‘s 2002-08-27
  • 打赏
  • 举报
回复
大家抽空看看啊,急用,谢谢!
hanps 2002-08-27
  • 打赏
  • 举报
回复
用外部数据窗口,问题可能很好解决
Icon 2002-08-27
  • 打赏
  • 举报
回复
没看明白你程序的意思,如果只是将sle_1和sle_2中的内容提交到数据库,而且当sle的内容为空时,数据库中为NULL的话,如下解决:
int n_count,li_cws1,li_cws2, i

if trim(sle_error1.text) = '' then
setnull(li_cws1)
else
li_cws1 =integer(sle_error1.text)
end if

if trim(sle_error2.text) = '' then
setnull(li_cws2)
else
li_cws2 =integer(sle_error2.text)
end if

INSERT INTO mng_dbsh(jhid, zybz, lrr1, lrrq1, cws1,lrr2, lrrq2,cws2,shr, shrq)
VALUES(:ls_jhid, 'N', :ls_lrr1, :ld_lrrq1,:li_cws1,:ls_lrr2, :ld_lrrq2,:li_cws2,:ls_shr, :ld_shrq)
using sqlca;

if sqlca.sqlcode = -1 then
rollback;
Messagebox("提示","数据库错误,错误描述~n" + SQLCA.SQLErrText,Exclamation!,OK!)
else
commit;
Messagebox("提示","确认信息成功提交")
end if

sle_error1.text=""
sle_error2.text=""
海洋‘s 2002-08-27
  • 打赏
  • 举报
回复
问题依然存在啊

if trim(sle_error1.text) ="" and trim(sle_error2.text) ="" then
setnull(li_cws1)
setnull(li_cws2)
else
li_cws1 =integer(sle_error1.text)
li_cws2 =integer(sle_error2.text)
end if

if trim(sle_error1.text) ="" then
setnull(li_cws1)
else
li_cws1 =integer(sle_error1.text)
end if

if trim(sle_error2.text) = "" then
setnull(li_cws2)
else
li_cws2 =integer(sle_error2.text)
end if
end if
这写代码也不行啊
Icon 2002-08-27
  • 打赏
  • 举报
回复
int n_count,li_cws1,li_cws2, i

if trim(sle_error1.text) = '' then
setnull(li_cws1)
else
li_cws1 =integer(sle_error1.text)
end if

if trim(sle_error2.text) = '' then
setnull(li_cws2)
else
li_cws2 =integer(sle_error2.text)
end if

INSERT INTO mng_dbsh(jhid, zybz, lrr1, lrrq1, cws1,lrr2, lrrq2,cws2,shr, shrq)
VALUES(:ls_jhid, 'N', :ls_lrr1, :ld_lrrq1,li_cws1,ls_lrr2, :ld_lrrq2,li_cws2,:ls_shr, :ld_shrq)
using sqlca;

if sqlca.sqlcode = -1 then
rollback;
Messagebox("提示","数据库错误,错误描述~n" + SQLCA.SQLErrText,Exclamation!,OK!)
else
commit;
Messagebox("提示","确认信息成功提交")
end if

cb_ok.Enabled=false
le_error1.text=""
sle_error2.text=""
nbgyf 2002-08-27
  • 打赏
  • 举报
回复
(不好意思来晚了)
Eric2000(LostMoneyLostLove) 的方法应该可以解决你的问题了
cyliu2000 2002-08-27
  • 打赏
  • 举报
回复
将单行编辑框改为数据源为空的数据窗口,将数据窗口数据域属性设置为empty string is null
Eric2000 2002-08-27
  • 打赏
  • 举报
回复
if trim(sle_error1.text) = '' then
setnull(li_cws1)
else
li_cws1 =integer(sle_error1.text)
end if

if trim(sle_error2.text) = '' then
setnull(li_cws2)
else
li_cws2 =integer(sle_error2.text)
end if
这是对的啊!如果不用Setnull()设定,Powerbuilder的integer()函数会将空串的值转换为0
海洋‘s 2002-08-27
  • 打赏
  • 举报
回复
1.to suxkqd(速度)

if sle_error1.text = '' then li_cws1 =null
if sle_error2.text = '' then li_cws2 =null
这种方法不行啊,结果还是0

2.: killerdanny(我爱AC米兰)
能将SetNull写成的代码贴出来看看吗,谢谢
Icon 2002-08-27
  • 打赏
  • 举报
回复
if trim(sle_error1.text) = '' then
setnull(li_cws1)
else
li_cws1 =integer(sle_error1.text)
end if

if trim(sle_error2.text) = '' then
setnull(li_cws2)
else
li_cws2 =integer(sle_error2.text)
end if
xiaoxuw 2002-08-27
  • 打赏
  • 举报
回复
setnull();
wclarity 2002-08-27
  • 打赏
  • 举报
回复
li_cws1 =integer(sle_error1.text)
li_cws2 =integer(sle_error2.text)


如果sle_error1.text为null,则li_cws1为空,如果sle_error1.text="",则li_cws1为0
suxkqd 2002-08-27
  • 打赏
  • 举报
回复
li_cws1 =integer(sle_error1.text)
li_cws2 =integer(sle_error2.text)
if sle_error1.text = '' then li_cws1 =null
if sle_error2.text = '' then li_cws2 =null
killerdanny 2002-08-27
  • 打赏
  • 举报
回复
setnull()
海洋‘s 2002-08-27
  • 打赏
  • 举报
回复
大家给看看啊,这个问题出在那里啊?谢谢!

1,079

社区成员

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

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