在某些情况下,可能需要数据窗口只保存编辑不保存删行。
例如,有一个卡片表,先注册后发卡。注册时添加记录到表中并保存,发卡时将已注册卡发给员工。发卡时可以删除记录。但这时候删除的记录不能从数据库中删除,所以保存时就不能直接对数据窗口update(),而要采用一些变通的办法。
今天就出现了这种情况,下面是解决办法。如果有更好的办法再补充。
datastore ldst_1//定义一个用于保存的datastore
ldst_1 = create datastore
ldst_1.dataobject = dw_edit.dataobject//dw_edit是显示的数据窗口
ldst_1.settransobject(sqlca)
//将显示的记录复制到datastore,复制后ldst_1的行状态为newmodified!
dw_edit.rowscopy(1,dw_edit.rowcount(),primary!,ldst_1,1,primary!)
for ll_i = 1 to ldst_1.rowcount()
ldst_1.setitemstatus(ll_i,0,primary!,datamodified!)//行状态修改为datamodified!
ldst_1.setitemstatus(ll_i,'kp_person',primary!,datamodified!)//'kp_person'为用户修改列,此处必须修改其状态
//注意:以下赋值项要写到setitemstatus之后
ldst_1.object.kp_lb[ll_i] = '2'//卡类别(2用户卡)
ldst_1.object.kp_fkr[ll_i] = gl_userid//发卡人
ldst_1.object.kp_fkrq[ll_i] = f_getserverdate()//发卡日期
next
//保存
sqlca.autocommit = false
if ldst_1.update() = 1 then
commit;
sqlca.autocommit = true
messagebox("提示","保存成功!")
else
rollback;
sqlca.autocommit = true
messagebox("提示","保存失败!")
return -1
end if