在修改订单的时候,在dbgrid里增加记录,保存后发现增加的那几条记录没有保存到数据库,还是原样。
比如,一个订单本来有5条记录,我点修改进入修改界面,然后在dbgrid里又增加了5条数据,保存成功后,然后重新浏览该订单发现还是5条,原先增加的5条数据没有保存到数据库。注: 1.在点修改按钮单据时候(formshow事件),我启用了缓存更新
     ADOQuery1.CursorType:=ctStatic;   //  启用缓存更新
     ADOQuery1.LockType:=ltBatchOptimistic;   //  启用缓存更新
     2. 点击保存按钮button时统一更新
         ADOQuery1.Edit;
         ADOQuery1.Post;
         ADOQuery1.UpdateBatch(arAll);是不是这样的写法,只能更新记录,不能增加记录啊?

解决方案 »

  1.   

    如要新增记录,应是命令:ADOQuery1.Insert
      

  2.   

    Edit只能是更新当前指针所指记录。
      

  3.   

    你這哪裡是新增記錄是修改編輯狀態...
      ADOQuery1.Edit;
      ADOQuery1.Post;
      ADOQuery1.UpdateBatch(arAll);參考以下的代碼:1.新增:
    procedure TRes_Cq_HrQj_F.btnSB_NewClick(Sender: TObject);
    begin
      inherited;
      ChangeStatus(sEdit);
      qry_hrqj.Append;
      qry_hrqj.FieldValues['OPID']:=_UserNo;
      qry_hrqj.FieldValues['OPBY']:=_UserName;
      qry_hrqj.FieldValues['QJDNO']:=FormatdateTime('yyyy'+ 'mm'+ 'dd'+ 'hh'+ 'mm'+ 'ss'+ 'zzz',Now);
      cx_jb.SetFocus;
    end;2.修改:procedure TRes_Cq_HrQj_F.btnSB_ModiClick(Sender: TObject);
    begin
      inherited;
      qry_hrqj.Edit;
      qry_hrqj.FieldByName('OPBY').AsString:=_UserName;
      ChangeStatus(sEdit);
    end;3.保存:procedure TRes_Cq_HrQj_F.btnSB_SaveClick(Sender: TObject);
    begin
      inherited;
      if not btnSB_New.Enabled then
      begin
        if (Trim(cx_jb.Text)='') and
           (Trim(cx_gh.Text)='') and
           (Trim(cx_qjlb.Text)='') and
           (Trim(cx_sqrq.Text)='') and
           (Trim(cx_ksrq.Text)='') and
           (Trim(cx_jsrq.Text)='') and
           (Trim(cx_qjyy.Text)='') then
        begin
          MessageDlg('操作提示:數據不完整,如果不保存請點擊“取消”終止操作!',mtWarning,[mbOK],0);
          exit;
        end;
        if qry_hrqj.State in [dsedit,dsinsert] then
        begin
          try
            isSave:=true;
            qry_hrqj.Post;
          finally
            ChangeStatus(sBrowse);
          end;  
        end;
      end;
    end;4.刪除:procedure TRes_Cq_HrQj_F.btnSB_DelClick(Sender: TObject);
    begin
      inherited;
      if MessageDlg('你確定要刪除此條記錄嗎?',mtWarning,[mbYes,mbNo],0)=mryes then
      begin
        if not qry_hrqj.IsEmpty then
        begin
          qry_hrqj.Delete;
        end else
        Abort;
      end
    end;5.取消操作:procedure TRes_Cq_HrQj_F.btnSB_CancelClick(Sender: TObject);
    begin
      inherited;
      qry_hrqj.Cancel;
      ChangeStatus(sBrowse);
    end;基礎的東東,多研究一下...
      

  4.   

    楼上的能不能把ChangeStatus()这个过程的代码发来看看
      

  5.   

    新增时用Append;
    保存时用 ADOQuery1.Edit;
      ADOQuery1.Post;
      ADOQuery1.UpdateBatch(arAll);//如果ADOQuery1.LockType:=ltOptimistic;就不用此句
    就可以,