有class表,bm是主键,在数据窗口中,点“保存”控件,bm不能重复。在保存我写以下代码,但是输入重复时,会提示有重复,却不是我所写的messagebox里的内容,输入不重复的,提示:expression is not valid ,但在数据库里查找却可以找到刚输入的数据。
long ll_row,i,ll_rowcount
string ls_lb_bh, is_status
ls_lb_bh = "bm "
if trim(ls_lb_bh) = "" or isnull(ls_lb_bh) then
messagebox("提示信息","类别编号不能为空,请重新输入!")
tab_1.tabpage_1.dw_1.setcolumn("bm")
tab_1.tabpage_1.dw_1.setfocus()
return
end if
SELECt count(*)
INTO :i
FROM class
WHERe bm = :ls_lb_bh;
//如果是新增并且重复提示
if is_status = "New" and i > 0 then
messagebox("提示信息","输入的编号已经存在,请重新输入!")
return
end if
//更新
if tab_1.tabpage_1.dw_1.update() = 1 then
commit;
if is_status = "New" then
tab_1.tabpage_1.dw_1.rowscopy(1,1,primary!,tab_1.tabpage_1.dw_1, &
1,primary!)
else
ll_row = tab_1.tabpage_1.dw_1.find("Lhhb = '" + ls_lb_bh + "'", &
1,ll_rowcount)
tab_1.tabpage_1.dw_1.deleterow(ll_row)
tab_1.tabpage_1.dw_1.rowscopy(1,1,primary!,tab_1.tabpage_1.dw_1, &
ll_row,primary!)
end if
close(parent)
else
rollback;
messagebox("提示信息","数据保存失败!")
end if
integer ll_row
string ls_lb_bh, is_status
ls_lb_bh=tab_1.tabpage_1.dw_1.getitemstring(1,"Lbbh")
if ls_lb_bh = "" or isnull(ls_lb_bh) then
messagebox("提示信息","类别编号不能为空,请重新输入!")
returnend if
if is_status = "New" then
SELECT count(*)
INTO :ll_row
FROM class
WHERe Lbbh = :ls_lb_bh;
if ll_row > 0 then
messagebox("提示信息","输入的编号已经存在,请重新输入!")
return
end if
end if
if tab_1.tabpage_1.dw_1.update() = 1 then
tab_1.tabpage_1.dw_1.resetupdate()
commit;
else
rollback;
messagebox("提示信息","数据保存失败!")
end if
PB数据窗口保存不重复的数据
答案:3 悬赏:40 手机版
解决时间 2021-02-20 12:20
- 提问者网友:半生酒醒
- 2021-02-20 00:00
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-02-20 00:30
初步看了下,你整体思路还是可以的,有相应得检查排错代码。运行结果不是你的设想,你可以通过debug一步步排查,看看每一步变量取值、程序转向是不是按你设想的来进行
几个问题供你参考
1、ls_lb_bh = "bm " 这种赋值方法没见过,不知道你这个是不是从数据窗口取数,如果是,这种方法不对,或者是我OUT了。你查查这个数据能不能正常取出
2、你通过select count方法检查是否有重复,这是对的,不过应该在NEW分支里面来做,不然其他类别不需要也运行一次,没意义
3、你的dw提交好像有问题,很复杂的用rowscopy方法,实际上应该用SQL语句处理更直观
没看到你的界面,原则上新增和修改不应该共用一个界面,这样分开处理程序简单清晰
几个问题供你参考
1、ls_lb_bh = "bm " 这种赋值方法没见过,不知道你这个是不是从数据窗口取数,如果是,这种方法不对,或者是我OUT了。你查查这个数据能不能正常取出
2、你通过select count方法检查是否有重复,这是对的,不过应该在NEW分支里面来做,不然其他类别不需要也运行一次,没意义
3、你的dw提交好像有问题,很复杂的用rowscopy方法,实际上应该用SQL语句处理更直观
没看到你的界面,原则上新增和修改不应该共用一个界面,这样分开处理程序简单清晰
全部回答
- 1楼网友:街头电车
- 2021-02-20 01:59
debug跟踪。rowscopy()没必要用,
如果不是多表之间切换更新 resetupdate()也没必要用。
- 2楼网友:woshuo
- 2021-02-20 01:17
不知道你说的这个问题是啥,dw.retrieve(parm1,parm2,...,parmn)是可以带参数检索的,对应数据窗口编辑表达式模式下的arguments菜单 如果你输入什么检索参数都只有同一行参数,那建议你检查一下是否使用了distinct、top等约束语句,另外查清楚查询条件会不会真的会使返回记录只有一行,有些问题查到最后会让你大跌眼镜的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯