Delphi 数据库错误 TToolBar(ToolBar) 无法为更新定位行。一些值可能已在最后一次读取后已更改。
我先往数据库里的某张表插入一条数据,然后对这条数据进行修改。这张表中的某个字段,这条数据插入到这张表中,如果表中的某个字段,我在新增的时候,给这个字段赋值了,我修改之后保...
我先往数据库里的某张表插入一条数据,然后对这条数据进行修改。这张表中的某个字段,这条数据插入到这张表中,如果表中的某个字段,我在新增的时候,给这个字段赋值了,我修改之后保存没有任何问题;但是如果我没有赋值,修改这条数据的时候,我才给那个字段赋值,保存就出错,错误提示如下:
数据库错误
TToolBar(ToolBar)
无法为更新定位行。一些值可能已在最后一次读取后已更改。 展开
数据库错误
TToolBar(ToolBar)
无法为更新定位行。一些值可能已在最后一次读取后已更改。 展开
2个回答
2014-06-23 · 知道合伙人软件行家
关注
展开全部
据我的经验,遇到上述的问题,可能的原因是数据库默认值设计的问题。
当你在对数据库设计时,对某些字段设置了默认值,当你在进行数据提交以后,数据库会自动修改对应字段的所有行的默认值,从而可能导致数据库与数据集中数据的不一致,使ADOQuery无法对数据集进行定位。
当数据库的CursorLocation 的属性是clUseClient时,因为数据库存在默认值,在第一次append的时候,数据库自动修改了部分列,所以客户端无法定位。
解决方法:
修改数据库设计,不再设置默认值,为数据库表定义主键,保证其唯一性。
在执行完ADOQuery.Post之后,执行ADOQuery.Refresh,对于设置默认值的情况可以解决。
置ADOQuery控件的CursorLocation属性为clUseServer。
展开全部
这个问题,不同的数据库不同的问题,在Access数据库中,出现这个错误,于是在表中建立主键,就不报这个错了。在mysql数据库中,已经有主键了,仍然报这个错误。后来发现,只要更新的值与之前的值一样,就会报这个错误,而ACCESS中不会报错。
如:字段1的值为"aaa",此时执行
adotable1.Edit;
adotable1.FieldByName('字段1').AsString:='aaa' ;
adotable1.Post;
这段程序,就会报错,而将aaa改成其他的字符,就不报错。
如:字段1的值为"aaa",此时执行
adotable1.Edit;
adotable1.FieldByName('字段1').AsString:='aaa' ;
adotable1.Post;
这段程序,就会报错,而将aaa改成其他的字符,就不报错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询