当前位置: 代码迷 >> PB >> 关于dw.update后自增主键自动刷值的有关问题
  详细解决方案

关于dw.update后自增主键自动刷值的有关问题

热度:43   发布时间:2016-04-29 06:42:08.0
关于dw.update后自增主键自动刷值的问题
情况如下:有个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呢?
------解决方案--------------------
引用:
楼上几位都理解错了,我没有给dw_1.docid赋值,只是dw_1.update()后取出数据库自增的docid,赋予dw_2的某一列
我现在的问题是第一次对dw_1.update成功后,在没有commit的情况下,能够得到dw_1.docid,注意因后续数据不合法,执行了rollback,此时再次执行 dw_1.update() 后,得到的 dw_1.docid 值没有再自增,而是仍旧得到第……
  相关解决方案