ADO一个很有意思的问题,关于“无法为更新定位行...”
ADO在保存时提示错误:“无法为更新定位行。一些值可能已在最后一次读取后已更改”
这个问题困扰了大半天,在网上查询了很多这类问题解决方法,大都说得很模糊,未能根本解决问题
有说跟字段的设置了默认值有关,也有说是其他用户更新了记录,我就写了一个很简单的程序来跟踪,
就数据库也保证只有一个用户连接,结果发现问题出在一个DateTime型字段上,修改其它任何字段都
没有问题,一旦修改该字段然后UpdateBatch()就会报错,经过反复测试,终一找到问题的根源:
数据库(Sybase)中该字段存的值精确到了毫秒,如'2009-06-09 14:08:33.756',ADO读取该字段时
值并未发生变化,将其值修改为如'2009-06-09 14:08:34.756',错误就出来了:提交数据时,ADO在
数据库进行匹配时取的条件却不再是'2009-06-09 14:08:33.756',似乎对其进行了四舍五入(因为我
将数据库的值改为'2009-06-09 14:08:33.750'后,就能正常修改保存,只要毫秒精确到了个位就不能
正常更新),所以断定是ADO的时间类型精度不够造成。
是不是很有意思!
我现还没有找到解决方法,所以来这里请高手支招,我想更新数据库中所DateTime型号字段的值,但由
于现场数据量太大,更新是一件很痛苦的事情,都是“傻base”惹的祸。