注册 登录
编程论坛 PowerBuilder

[求助]不能正确保存数据,请指点一下如下代码哪有问题?

gdyuer 发布于 2007-05-25 09:52, 1140 次点击
这是“保存”按钮里的代码
long row
row=dw_1.getrow()
if dw_1.dataobject="clzc" then
dw_1.setitem(row,18,dw_1.GetItemDecimal(row,"yfzc")+dw_1.GetItemDecimal(row,"wxzc")+dw_1.GetItemDecimal(row,"bxzc")+dw_1.GetItemDecimal(row,"sfzc"))
//就是yfzc、wxzc、bxzc和sfzc四个字段的值相加后的结果传送给另外一个字段
end if
dw_1.Update()
IF dw_1.Update()=1 THEN
COMMIT USING SQLCA;
ELSE
ROLLBACK USING SQLCA;
messagebox("失败!","操作的结果保存至数据库时失败")
END IF

我点击保存按钮后,数据也保存,但dw_1.setitem(row,18,dw_1.GetItemDecimal(row,"yfzc")+dw_1.GetItemDecimal(row,"wxzc")+dw_1.GetItemDecimal(row,"bxzc")+dw_1.GetItemDecimal(row,"sfzc"))列值并没保存。关闭窗口,重新打开后,找到这条记录,再点击一下保存,该列值才记算并保存下来。

代码哪写错了?在线等

再就是上面的代码写的麻烦不麻烦?我刚学不久,有没有更精练或更简洁的代码,请告诉我

[此贴子已经被作者于2007-5-25 15:54:42编辑过]

4 回复
#2
gdyuer2007-05-25 15:55

怎么没人帮我呀

#3
路過2007-05-25 16:39
你把那個四個用messagebox show一下,
int li_aa
li_aa=dw_1.GetItemDecimal(row,"yfzc")+dw_1.GetItemDecimal(row,"wxzc")+dw_1.GetItemDecimal(row,"bxzc")+dw_1.GetItemDecimal(row,"sfzc")
dw_1.setitem(row,18,li_aa)
datawindow-->update properties 下,有沒有選擇要更新的欄位的。
#4
gdyuer2007-05-25 18:43
“datawindow-->update properties 下,有沒有選擇要更新的欄位的。” 我看了,没问题

int li_aa
li_aa=dw_1.GetItemDecimal(row,"yfzc")+dw_1.GetItemDecimal(row,"wxzc")+dw_1.GetItemDecimal(row,"bxzc")+dw_1.GetItemDecimal(row,"sfzc")
dw_1.setitem(row,18,li_aa)

主要是不能即时更新,比如说第一次改了YFZC的值,直接点击保存后,只是把YFZC的这列值给保存了,dw_1.setitem(row,18,li_aa)没反应,该列值还是原来的值。

得在改完YFZC的值后,再点击一下别的任意一列,再点击一下保存,结果才能出来。

现在我把int li_aa
li_aa=dw_1.GetItemDecimal(row,"yfzc")+dw_1.GetItemDecimal(row,"wxzc")+dw_1.GetItemDecimal(row,"bxzc")+dw_1.GetItemDecimal(row,"sfzc")
dw_1.setitem(row,18,li_aa)的代码放在DATAWINDOW有losefocus的事件中,并且又加入一行dw_1.accepttext(),也还是不行。

各位老大再帮一下吧

[此贴子已经被作者于2007-5-25 18:55:11编辑过]

#5
路過2007-05-28 08:26

if dw_1.accepttext() = 1 then
STRING ls_ordno
ls_ordno = ls_kind+TRIM(ls_cust_no)+MID(TRIM(ls_ord_date),3,8)
dw_1.SetItem(dw_1.getrow(),'ord_no',ls_ordno)
IF IsNull(ls_ordno) OR Len(Trim(ls_ordno)) = 0 THEN
MESSAGEBOX('訊息!!','此訂單編號不能為空白!!!!',EXCLAMATION!,OK!)
dw_1.SetColumn('ord_no')
RETURN
END IF

integer row
string ls_date,ls_date1

//計算修改和刪除的筆數
ll_mod = dw_1.ModifiedCount()
ll_del = dw_1.DeletedCount()
ll_total = ll_mod + ll_del

//檢查資料是否有異動
if ll_total<>0 then

ll_mod = dw_1.modifiedcount()
ll_del = dw_1.deletedcount()
ll_total = ll_mod + ll_del

if ll_total = 0 then
ii_status = 0
wf_menu_ctrl()
im_menu.item[1].item[1].enabled=true

end if
else
MESSAGEBOX('訊息!!','請確定是否有資料更新!!',EXCLAMATION!,OK!)
return
end if
end if
我也是這麼寫的,沒有問題呀!你有沒有寫紅色的那一部份呀。
你把你每一個getitemdecimal的數據messagebox一下,看看有沒有抓取出來。

1