环境:D7+SQLSERVER2000,
Tadodataset
LockType 为ltBatchOptimistic
commandText 为 select a1,a2,a3....a20,Price from TB where 1=2 (作为临时表)操作:
在adodataset1 中append了N行记录(由其他窗体进行写入除price外其他字段的内容),
然后对price字段进行手工录入,录完所有行的price后,保存。 保存的代码为
fm_adodm.adoconnection1.BeginTrans;
try
adodataset1.updateBatch(arall);
fm_adodm.adoconnection1.commitTrans;
showmessage('保存成功');
except
fm_adodm.adoconnection1.RollbackTrans;
showmessage('保存失败,请检查');
end;
现在发生一些奇怪现象: 有时保存后,检查,发现会有几行记录的price值为0,而实际保存前已手工录入了。
有时只有两行也会出现该现象。 此种现象不是每次都发生。 近期对数据库作了维护,迁移了历史数据(因表记录有50W左右的记录),大概迁移了30W左右的记录。 在没有做迁移时,从来没有发生过此现象。 不知是哪方面的原因引起的,找了很多方面都没有能解决,请教各位还有类似情况发生过。 是SQSERVER的原因,还是adodataset提交时的原因?
Tadodataset
LockType 为ltBatchOptimistic
commandText 为 select a1,a2,a3....a20,Price from TB where 1=2 (作为临时表)操作:
在adodataset1 中append了N行记录(由其他窗体进行写入除price外其他字段的内容),
然后对price字段进行手工录入,录完所有行的price后,保存。 保存的代码为
fm_adodm.adoconnection1.BeginTrans;
try
adodataset1.updateBatch(arall);
fm_adodm.adoconnection1.commitTrans;
showmessage('保存成功');
except
fm_adodm.adoconnection1.RollbackTrans;
showmessage('保存失败,请检查');
end;
现在发生一些奇怪现象: 有时保存后,检查,发现会有几行记录的price值为0,而实际保存前已手工录入了。
有时只有两行也会出现该现象。 此种现象不是每次都发生。 近期对数据库作了维护,迁移了历史数据(因表记录有50W左右的记录),大概迁移了30W左右的记录。 在没有做迁移时,从来没有发生过此现象。 不知是哪方面的原因引起的,找了很多方面都没有能解决,请教各位还有类似情况发生过。 是SQSERVER的原因,还是adodataset提交时的原因?
销售或客服或客户传回的消息总有失实的部分。
可能的话,把程序更新一下,Price字段在保存前做个检查。
可以先在一台机器上做这个实验,看问题能否重现
一开始我也无法相信这个现象,因为系统用了几年了,一直没有发生过。就这几天的事。
今天下午我在现场就发生过几次,而且有一次仅2 行记录也发生此现象。后来加了保存前检查price是否有0的记录,待客户测试,看反馈。真是想不明白,所以请教同行。
下午我加了检查,先在一台机上测试,等客户消息 了。我一直都是用批量提交的方式,从来没有出现过此种现象,怀疑是不是SQLSERVR表记录被迁移出去后引起的。TB表用了一个自增长的字段作主键的。
没有参与其他计算,只是手工录入。其他列都是不可编辑的,只有price列可以编辑,用的是cxgrid.今天在SQLSERVER中用 DBCC 查找了一下,也没有发现有什么异常。