程序编译运行时出错"无法为更新行集定位:一些值可能已在最后读取后改变。"(100分)

  • 主题发起人 主题发起人 舒克
  • 开始时间 开始时间

舒克

Unregistered / Unconfirmed
GUEST, unregistred user!
我编了一个小程序,在编译运行时出错"无法为更新行集定位:一些值可能已在最后读取
后改变。"我想问一下这句话代表什么意思?如何解决呢?
我的程序是用ADOTable连结了一个Access数据库,源程序如下:
while not ADOTable1.Eof do //表循环
begin
edit1.Text:=ADOtable1.FieldByName('时长').value;
timelong:=ADOtable1.FieldByName('时长').value;
edit2.Text := FormatDateTime('s',timelong);//取秒数
edit3.Text := FormatDateTime('n',timelong);//取分数
sec := StrToInt(edit2.Text);
Min := StrToInt(edit3.Text);
if sec>0 then
begin
min := min+1; //如果大于1秒,分数+1
if min>3 then //如果大于2分钟,原分钟减3分钟后用剩下的分钟数*0.11再
begin //加上0.22
Edit4.Text := FloatToStr((min-3)*0.11+0.22);
ADOtable1.edit;
ADOtable1.FieldByName('话费').value := (min-3)*0.11+0.22; //请注意这两句代码,
ADOtable1.FieldByName('filtrate').value := 1 ; //如果去掉这两句,程序运行时
end //就不会出现以上的出错提示。
else
begin
Edit4.Text := FloatToStr(0.22);
ADOtable1.edit;
ADOtable1.FieldByName('话费').value := 0.22; //请注意这两句代码,
ADOtable1.FieldByName('filtrate').value := 1;//如果去掉这两句,程序运行时
end; //就不会出现以上的出错提示。
end;
ADOtable1.Next;
end;
end;

程序运行一开始过滤了几个数据是正常的,但不出10个数据,就出现"无法为更新行集定位:一些值
可能已在最后读取后改变。" 去掉我注释的那两句代码就不报错,我想知道这是为什么?如何解决?
 
从几个方面查问题:
1》一定要设置主键。
2》有没有日期字段?如有,取消默认值。
3》ADO的属性lockType设为ltBatchoption
更新时,最好使用ADOcommand
 
Flat-File?
Try Server-Side curror.
 
加个ID,最好是自动编号,且在你的程序中看不见或不能被编辑
不管是日期型还是数值型都不要有默认值
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
796
import
I
I
回复
0
查看
594
import
I
后退
顶部