读书人

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

发布时间: 2013-08-04 18:26:16 作者: rapoo

关于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 值没有再自增,而是仍旧得到第……



如楼主自己所说你第一次update后rollback了,这时自增的列是不会自动增加的,因为你的事务回滚了。虽然update之后,数据库表里是插入了你update的数据,但是要事务提交才是真正的更新了表。
[解决办法]
需要pbobdxxx.ini(share目录下,xxx是版本号)这个文件在系统目录或程序目录下,dw才可以自动刷新identity
[解决办法]
/uploadfile/jiaocheng/20140137/2753/2014012701532946097.jpg
[解决办法]
关于dw.update后自增主键自动刷值的有关问题

读书人网 >PB

热点推荐