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

请大家帮这个简单的代码为什么会出“无法为更新定位行”有关问题

2012-09-01 
请大家帮这个简单的代码为什么会出“无法为更新定位行”问题请问,以下的代码,如果出现“无法为更新定位行。一

请大家帮这个简单的代码为什么会出“无法为更新定位行”问题
请问,以下的代码,如果出现“无法为更新定位行。一些值可能已在最后一次读取后已更改”问题,那么原因是什么?

因为 出现该问题 很偶然,跟踪不到,只能人工判断了。

环境是D7 数据库是ACCESS,ID是主键,字段有默认值,d_list 是一个dbgrid

Delphi(Pascal) code
          Adbgrid.DataSource.DataSet.DisableControls;          Adbgrid.DataSource.DataSet.Locate('id',currid,[]);          Adbgrid.DataSource.DataSet.Edit;          Adbgrid.FieldColumns['errflag'].Field.Value:=7;            Adbgrid.FieldColumns['actionflag'].CheckboxState:=cbChecked;          Adbgrid.DataSource.DataSet.Post;          Adbgrid.DataSource.DataSet.Refresh;          Adbgrid.DataSource.DataSet.EnableControls;


[解决办法]
直接用dataset操作的数据表,最好不要用默认值,甚至主键都不要默认值
3层更是,有默认值会非常麻烦
[解决办法]
重现应该很简单,append,post,edit,post就报错了
[解决办法]
无法为更新定位行。一些值可能已在最后一次读取后已更改”这个错误是因为,当你更新的数据时,该数据在你读取处理于修改状态后,未更新到数据库时,已经被别的操作更新过了。避免这种错误的话就要在你修改数据时将读的记录记录下来,别人再来读那些数据时就先到记录表中检查是否已经在修改了,如果在就不让别的用户修改了。不知道你是否明白,举个简单的例子,你用数据集在数据库表中读取十条记录出来修改,当处理于修改状态后,你再在后台用update语句更新你选择的记录,更新后再回到数据集这边做保存,这时就会出现这个提示了。
[解决办法]
那应该是默认值的原因
如果有默认值字段没有赋值的话,数据库就会以默认值保存,那么前台数据就会跟后台数据不一样了
再做更新或者修改时就会有此提示

解决方法:
1,删除默认值
2,新增时赋值
3,保存后/操作前刷新

[解决办法]
去掉数据库的默认值,以下代码注销试试。。。
Delphi(Pascal) code
Adbgrid.DataSource.DataSet.Refresh;
[解决办法]
没有设置主键,有两行以上的相同记录,会出这个提示
[解决办法]
直接操作DataSet修改数据试试
不用 FieldColumns
[解决办法]
楼主用的是ADO吧? ADO经常有这种问题,单用户情况下也会出现,即便不修改任何数据,只要鼠标多点几下DBGRID就会报这个信息。
[解决办法]
跟ADO有什么关系,liw125008已经说得很明白了

1、有bool类型的字段,在插入数据时写入初始值
2、在修改数据操作之前ADOQuery.Refresh。
一般都可以解决,要是还不行,那就只有再做一次查询了,好好检查一下程序的逻辑
[解决办法]
Delphi(Pascal) code
          Adbgrid.DataSource.DataSet.DisableControls;          if Adbgrid.DataSource.DataSet.Locate('id',currid,[]) then begin            Adbgrid.DataSource.DataSet.Edit;            Adbgrid.FieldColumns['errflag'].Field.Value:=7;              Adbgrid.FieldColumns['actionflag'].CheckboxState:=cbChecked;            Adbgrid.DataSource.DataSet.Post;            Adbgrid.DataSource.DataSet.Refresh;          end;          Adbgrid.DataSource.DataSet.EnableControls; 

热点排行