下面是我写的代码错误提示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;

解决方案 »

  1.   

    Adoquery1.FieldValues['kcsl']:=Adoquery1.FieldValues['rksl']-Adoquery1.FieldValues['cksl']-Adoquery1.FieldValues['yssl'];
    恐怕不能这么写吧
    FieldValues只能用来取出字段值
    还是用Update写一个SQL修改语句吧
      

  2.   

    当你的条件都不符合时,回调用 Adoquery1.post;
    而此时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;
      

  3.   

    if not (doquery1.State in [dsedit,dsinsert]) then
        doquery1.Edit;
        你的代码
      

  4.   

    给你提个建议。
    不要使用Edit,应该写出if not (State in [dsEdit, dsInsert]) then Edit;你跟一下程序,看看修改前的状态值。如果Edit后仍是dsBrowse,检查一下有没有其他事件影响。如果是用DBGrid,要保证DBGrid的Options中包含dgEditing;