首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

请求增援:Tadodataset批量提交时,个别字段值丢失

2012-07-27 
请求支援:Tadodataset批量提交时,个别字段值丢失环境:D7+SQLSERVER2000,TadodatasetLockType为ltBatchOpti

请求支援: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 语句和值

热点排行