奇怪的“无法为更新定位行。一些值可能已在最后一次读取后已更改”

客户说程序报错——“无法为更新定位行。一些值可能已在最后一次读取后已更改”。

反复试之无法再现。再问客户,说用的是Oracle数据库,一试,果不其然,报错。


查代码,发现原来是这个样子滴:

FDataSet.Edit;

FDataSet.FieldValues['name'] := Text;

FDataSet.Post;


当第一次Text=''时,post没有异常,紧接着第二次Text<>''时,post报错!!!

这是为神马呢?

原来啊,oracle库默认的''和NULL是一回事,于是第一次Post后,DataSet的值是'',而库里这时保存的是NULL,于是乎,第二次再Post时,数据库认为DataSet的数据与库里的数据不一致,就大吼一声“无法为更新定位行。一些值可能已在最后一次读取后已更改”。


真想大白,动手改为:

 

FDataSet.Edit;

if Trim(Text) <> '' then

   FDataSet.FieldValues['name'] := Text

else

   FDataSet.FieldValues['name'] := Null;

FDataSet.Post;


于是天下和谐了!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值