情况如下:有个dw,update属性中设置为:where clause -- key columns; key modification -- use update; unique key column 指定为对应的主键;identity column 也指定为对应的主键。该主键在sqlserver数据库中是自增列。
出现在问题如下:
第一次调用保存事件时,主表保存成功,得到的 ll_docid 为1,但后面代码中子表保存失败回滚了,当前窗口不关,用户再次点击保存按钮调用保存事件时,主表保存成功后得到的 ll_docid 仍旧为1,而实际该id为2。
怎么实现 rollback 后,再update时,得到新的自增列 id ?
请求各位高手指教
/////////////////////////////////////////////////////////////
代码如下:ue_save()事件中
l_return = dw_1.update(true,false)
IF ll_return = -1 THEN //主表保存失败回滚
ROLLBACK Using sqlca;
RETURN -1
END IF
ll_docid = dw_1.object.docid[dw_1.getrow()]
for i = 1 to dw_2.rowcount()
dw_2.object.docid[i] = ll_docid
next
l_return = dw_2.update(true,false)
IF ll_return = -1 THEN //子表保存失败回滚
ROLLBACK Using sqlca;
RETURN -1
ELSE
COMMIT;
dw_1.resetupdate()
dw_2.resetupdate()
return 1
END IF
///////////////////////////////////////////////////
------解决方案--------------------
identity column 在upadte的时候是不更新的,由数据库自己生成,也就是说这个列无论你怎么赋值都不会写到数据库里
------解决方案--------------------
[img=http://my.csdn.net/my/album/detail/721812][/img]
要注意,自增列不能人为的写入处理,只能由系统自动处理。
------解决方案--------------------
sqlca.autocommit = false //检查一下这项,应该为false。
------解决方案--------------------
十分的不明白。
看你的代码和描述,你的id取自数据窗口,你连续在当前数据窗口取值,当然没有变化。即使第一次的1,也是你在数据窗口中取得的。即使抛开前端从数据库方面来说,你第一次是回滚了的,第二次保存时,1都没有,哪里来的2呢?
------解决方案--------------------