马上结帖,急问?????

sunangel 2003-10-16 08:45:11
出现的错误信息是“无法为更新行集定位:一些值可能以在最后读取后改变”,老大,这是什么原因呀??
...全文
37 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunangel 2003-10-20
  • 打赏
  • 举报
回复
hmily1688、hongjg不要我也要给你们分。哈哈,接好了!
hmily1688 2003-10-18
  • 打赏
  • 举报
回复
猜测一下,你可能是这样delete的,你用的是sql 语句delete from where
而你直接用adotable.delete不就行了吗?这种问题出现的原因很多也不一样,不知道你是如何删除的,还有我遇到过一种情况,如果删除后这个table或query中有数据时不报错,但如果没有数据时报错,就是楼主的哪个错。后来我升级ado的版本就没有问题了。
天剑68 2003-10-18
  • 打赏
  • 举报
回复
hmily1688(流浪在中国)说得对,这个问题在ADO中经常出现,有触发器的问题,也有默认值的问题,但是大家还是应该把原因搞清楚。
delete再close、open是没有办法的办法。我也是这样做的,尤其是在ACCESS编程时。
hongjg 2003-10-18
  • 打赏
  • 举报
回复
我也不要分,只是碰到问题要讨论清楚对吧。
close再open是可以,但不是好办法,不止delete,edit也会出现问题的。
hmily1688 2003-10-18
  • 打赏
  • 举报
回复
如果单纯为了分我才懒得回答你的问题呢,
sunangel 2003-10-18
  • 打赏
  • 举报
回复
我也不知道是怎么回事,就是在Adotable在执行完delete后要close,再激活。我只是在下次delete前,加上了close,active而已,呵呵,就是这个样子的,就OK了!哈哈,你觉得你有分吗?
sunangel 2003-10-17
  • 打赏
  • 举报
回复
问题得到了解决,但是没有一位说对头,不过还是感谢大家的回答!^_^
hongjg 2003-10-17
  • 打赏
  • 举报
回复
是啊,有很多原因的。请贴出你的问题和解决办法啊?我以前碰到默认值和自增字段的问题。
huojiehai 2003-10-17
  • 打赏
  • 举报
回复
可能你的表没索引,最后加上索引试试
dickeybird888 2003-10-17
  • 打赏
  • 举报
回复
(@ $ @)
hmily1688 2003-10-17
  • 打赏
  • 举报
回复
你把怎么解决的贴出来啊,因为造成这种问题的原因不相同,有默认值的事,有触发器的事还有你主键没有设置 ,你把你如何解决的贴出来,让大家也都知道,以后碰到这种问题也好知道如何避免。
hmily1688 2003-10-16
  • 打赏
  • 举报
回复
你删除后用refresh试试
sunangel 2003-10-16
  • 打赏
  • 举报
回复
-----------------------------------------------------------------------------------------
我想可能是我用的ADOTABLE对象DELETE后没有更新的原因,但第一次不更新不会出错呀,第二次会出错,这是为什么???
-----------------------------------------------------------------------------------------
hmily1688 2003-10-16
  • 打赏
  • 举报
回复
这个问题是老问题

问题关键是在数据表中出现重复记录

当Delphi6.0刚刚推出来的时候,很多宣传资料说解决了这个问题,但是在最残酷的测试下,依然出现此问题!

最容易出现的地方是:当新增记录的时候,表里面添加了默认值,然后保存。因为Delphi默认不添加空的重复记录(当年FoxPro程序员转Delphi的时候被这个限制搞的头晕脑胀),但是只要有值就可以添加(大量出现在主从关系的从表中,关联字段默认添加),然后就死掉了!



所以你的触发器有点是在“FOR UPDATE”上,只有更新时触发,那么INSERT时如何处理,其实这个问题最容易出现在这里!



据我的使用及测试经验,一般解决方案有如下几点:

1、及时升级你的MDAC(目前是2.7 Refresh 2)及开发工具补丁,通过ADO方式连接数据库这是没有办法的办法,当然不会很彻底;

2、给数据库建立唯一索引,这种方法根据实际情况而定,因为很多情况下必须要添加自动递增字段,象有些基础资料数据库根本就不可取

3、比较好的办法,全部用手工控制不出现重复记录



一般情况下,控制方法主要有:

1、尽量不使用DB控件,尤其是DBNavigate控件,通过ADO的时候那玩意实在太弱智;

2、多数数据控制可以通过键值控制或者通过触发器控制!

angle097113 2003-10-16
  • 打赏
  • 举报
回复
把你的那段代码贴出来看看吧
会不会是没有主键的原因呢
sunangel 2003-10-16
  • 打赏
  • 举报
回复
我用的ADOCONNECTION和ADOTABLE
hmily1688 2003-10-16
  • 打赏
  • 举报
回复
由于所修改的记录与数据库所存在的记录冲突,导致更改失败(如其他用户已将记录删除),如果没有触发器,其实程序发生警告信息给Errors集合,但不终止程序运行,也不会出实时错误提示。如果你加上触发器,你所进行批更新包括从Deleted表中记录,即所有删除的记录,所有的更新请求都不存在(或已被其它用户删除),所以出现实时运行错误。
建议:用Ado对象Update方法代替UpdataBath试一试
hmily1688 2003-10-16
  • 打赏
  • 举报
回复
第一你的表中有没有默认值
zhoutian618 2003-10-16
  • 打赏
  • 举报
回复
把数据集的更新模式改成umKeyOnly啊。
UpdateMode吧。

记不清了。
你自己查一查吧。
是最后几个属性里面的。。。
sunangel 2003-10-16
  • 打赏
  • 举报
回复
所用的数据库为ACESS,不知道为什么,在操作时有时不会出现这个样子的错误,有出现?

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧