请大家帮这个简单的代码为什么会出“无法为更新定位行”问题
请问,以下的代码,如果出现“无法为更新定位行。一些值可能已在最后一次读取后已更改”问题,那么原因是什么?
因为 出现该问题 很偶然,跟踪不到,只能人工判断了。
环境是D7 数据库是ACCESS,ID是主键,字段有默认值,d_list 是一个dbgrid
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;Adbgrid.DataSource.DataSet.Refresh;
[解决办法]
没有设置主键,有两行以上的相同记录,会出这个提示
[解决办法]
直接操作DataSet修改数据试试
不用 FieldColumns
[解决办法]
楼主用的是ADO吧? ADO经常有这种问题,单用户情况下也会出现,即便不修改任何数据,只要鼠标多点几下DBGRID就会报这个信息。
[解决办法]
跟ADO有什么关系,liw125008已经说得很明白了
1、有bool类型的字段,在插入数据时写入初始值
2、在修改数据操作之前ADOQuery.Refresh。
一般都可以解决,要是还不行,那就只有再做一次查询了,好好检查一下程序的逻辑
[解决办法]
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;