Delphi 数据库错误 TToolBar(ToolBar) 无法为更新定位行。一些值可能已在最后一次读取后已更改。

我先往数据库里的某张表插入一条数据,然后对这条数据进行修改。这张表中的某个字段,这条数据插入到这张表中,如果表中的某个字段,我在新增的时候,给这个字段赋值了,我修改之后保... 我先往数据库里的某张表插入一条数据,然后对这条数据进行修改。这张表中的某个字段,这条数据插入到这张表中,如果表中的某个字段,我在新增的时候,给这个字段赋值了,我修改之后保存没有任何问题;但是如果我没有赋值,修改这条数据的时候,我才给那个字段赋值,保存就出错,错误提示如下:
数据库错误
TToolBar(ToolBar)
无法为更新定位行。一些值可能已在最后一次读取后已更改。
展开
 我来答
windblast
2014-06-23 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13606
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部

据我的经验,遇到上述的问题,可能的原因是数据库默认值设计的问题。


当你在对数据库设计时,对某些字段设置了默认值,当你在进行数据提交以后,数据库会自动修改对应字段的所有行的默认值,从而可能导致数据库与数据集中数据的不一致,使ADOQuery无法对数据集进行定位。


当数据库的CursorLocation 的属性是clUseClient时,因为数据库存在默认值,在第一次append的时候,数据库自动修改了部分列,所以客户端无法定位。


解决方法:

  1. 修改数据库设计,不再设置默认值,为数据库表定义主键,保证其唯一性。

  2. 在执行完ADOQuery.Post之后,执行ADOQuery.Refresh,对于设置默认值的情况可以解决。

  3. 置ADOQuery控件的CursorLocation属性为clUseServer。

nccr的文库
2018-07-11 · TA获得超过2618个赞
知道小有建树答主
回答量:385
采纳率:100%
帮助的人:45.7万
展开全部
这个问题,不同的数据库不同的问题,在Access数据库中,出现这个错误,于是在表中建立主键,就不报这个错了。在mysql数据库中,已经有主键了,仍然报这个错误。后来发现,只要更新的值与之前的值一样,就会报这个错误,而ACCESS中不会报错。
如:字段1的值为"aaa",此时执行
adotable1.Edit;
adotable1.FieldByName('字段1').AsString:='aaa' ;
adotable1.Post;
这段程序,就会报错,而将aaa改成其他的字符,就不报错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式