下面是我写的代码错误提示adoquery1没有在edit and insert state请问如何解决?
Adotable1.First;
for i:=1 to Adotable1.recordcount do
begin
combobox1.Items.Add(Adotable1.FieldValues['book']);
Adotable1.Next;
end;
Adoquery1.First;
for m:=1 to Adoquery1.RecordCount do //对s_storage表实际库存数量为0时初始为库存数量
begin
//使库存数量等于入库数量-出库数量-样书数量
if (Adoquery1.FieldValues['rksl']-Adoquery1.FieldValues['cksl']-Adoquery1.FieldValues['yssl'])<>Adoquery1.FieldValues['kcsl'] then
begin
Adoquery1.edit;
Adoquery1.FieldValues['kcsl']:=Adoquery1.FieldValues['rksl']-Adoquery1.FieldValues['cksl']-Adoquery1.FieldValues['yssl'];
end;
if Adoquery1.fieldbyname('sjkcsl').value=0 then
begin
Adoquery1.Edit;
Adoquery1.Fieldvalues['sjkcsl']:=Adoquery1.fieldbyname('kcsl').Value+Adoquery1.Fieldbyname('modisl').Value;
end;
Adoquery1.Next;
end;
try
Adoquery1.post;
Adocommand1.CommandText:='commit';
Adocommand1.Execute;
except
Adocommand1.CommandText:='rollback';
Adocommand1.Execute;
application.MessageBox('数据库不能初始 化',gv_msgtitle,mb_ok);
exit;
end;
Adoquery1.Refresh;
Adotable1.First;
for i:=1 to Adotable1.recordcount do
begin
combobox1.Items.Add(Adotable1.FieldValues['book']);
Adotable1.Next;
end;
Adoquery1.First;
for m:=1 to Adoquery1.RecordCount do //对s_storage表实际库存数量为0时初始为库存数量
begin
//使库存数量等于入库数量-出库数量-样书数量
if (Adoquery1.FieldValues['rksl']-Adoquery1.FieldValues['cksl']-Adoquery1.FieldValues['yssl'])<>Adoquery1.FieldValues['kcsl'] then
begin
Adoquery1.edit;
Adoquery1.FieldValues['kcsl']:=Adoquery1.FieldValues['rksl']-Adoquery1.FieldValues['cksl']-Adoquery1.FieldValues['yssl'];
end;
if Adoquery1.fieldbyname('sjkcsl').value=0 then
begin
Adoquery1.Edit;
Adoquery1.Fieldvalues['sjkcsl']:=Adoquery1.fieldbyname('kcsl').Value+Adoquery1.Fieldbyname('modisl').Value;
end;
Adoquery1.Next;
end;
try
Adoquery1.post;
Adocommand1.CommandText:='commit';
Adocommand1.Execute;
except
Adocommand1.CommandText:='rollback';
Adocommand1.Execute;
application.MessageBox('数据库不能初始 化',gv_msgtitle,mb_ok);
exit;
end;
Adoquery1.Refresh;
恐怕不能这么写吧
FieldValues只能用来取出字段值
还是用Update写一个SQL修改语句吧
而此时Adoquery1并不是EDIT,INSERT状态!! 改为:
if (Adoquery1.FieldValues['rksl']-Adoquery1.FieldValues['cksl']-Adoquery1.FieldValues['yssl'])<>Adoquery1.FieldValues['kcsl'] then
begin
Adoquery1.edit;
Adoquery1.FieldValues['kcsl']:=Adoquery1.FieldValues['rksl']-Adoquery1.FieldValues['cksl']-Adoquery1.FieldValues['yssl'];
Adoquery1.post;
end;
if Adoquery1.fieldbyname('sjkcsl').value=0 then
begin
Adoquery1.Edit;
Adoquery1.Fieldvalues['sjkcsl']:=Adoquery1.fieldbyname('kcsl').Value+Adoquery1.Fieldbyname('modisl').Value;
Adoquery1.post;
end;
Adoquery1.Next;
end;
try
Adocommand1.CommandText:='commit';
Adocommand1.Execute;
except
Adocommand1.CommandText:='rollback';
Adocommand1.Execute;
application.MessageBox('数据库不能初始 化',gv_msgtitle,mb_ok);
exit;
end;
Adoquery1.Refresh;
doquery1.Edit;
你的代码
不要使用Edit,应该写出if not (State in [dsEdit, dsInsert]) then Edit;你跟一下程序,看看修改前的状态值。如果Edit后仍是dsBrowse,检查一下有没有其他事件影响。如果是用DBGrid,要保证DBGrid的Options中包含dgEditing;