读书人

请求增援:Tadodataset批量提交时个

发布时间: 2012-07-27 11:03:01 作者: rapoo

请求支援:Tadodataset批量提交时,个别字段值丢失
环境:D7+SQLSERVER2000,
Tadodataset
LockType 为ltBatchOptimistic
commandText 为 select a1,a2,a3....a20,Price from TB where 1=2 (作为临时表)

操作:
在adodataset1 中append了N行记录(由其他窗体进行写入除price外其他字段的内容),
然后对price字段进行手工录入,录完所有行的price后,保存。

保存的代码为

Delphi(Pascal) code
   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值为0,

在adodataset1 中append了N行记录z(由其他窗体进行写入除price外其他字段的内容),

我的分析是很可能是你行手工录入price有问题,不然为什么会只有price出问题呢?
[解决办法]
楼主有没有亲手操作重现问题?
销售或客服或客户传回的消息总有失实的部分。
可能的话,把程序更新一下,Price字段在保存前做个检查。
可以先在一台机器上做这个实验,看问题能否重现
[解决办法]
是不是price字段也要经过其它的运算,最后才赋值,但运算结果是0
[解决办法]
试着查一下 触发器,或者存储过程。
也行某个程序员偷偷在里面写了点什么,你移了数据后被触发了,嘿嘿。
[解决办法]
是不是在用户录入price值后,光标还在cxgrid的单元格中时,用户就点击了保存按钮?(我在DBGridEh中遇到过这样的情况),如果是这样的话,丢失数据的记录应该每次只有一条,即最后一个输入price的记录,而不是多条。

但,即使是这种情况,cxgrid也不应该出现丢失数据的问题。
[解决办法]
用dbmonitor 跟踪下你的程序提交的SQL语句和值,可以跟到DELPHI生成的SQL 语句和值

读书人网 >.NET

热点推荐