procedure TF_INPUT.btn_saveClick(Sender: TObject);
begin
  with Qry_RKD0, Qry_RKD1, Qry_QTF do begin
    CalcuHJJE;
    Edit;
    if state in[dsEdit, dsInsert] then
    try
      begin
        Qry_RKD0.ApplyUpdates;
        Qry_RKD1.ApplyUpdates;
      end;
    except begin
    end;
    end;
  end;
end;我用的是bde  query ,updatesql控件, 按下保存就执行以上代码的,插入数据时候按下按钮是没问题的,当我修改其中一些字段值,再保存就会再插入修改过的记录。这样操作不应该执行insertsql才对阿。或者是我的代码哪里有问题?cachedupdates已经为True了

解决方案 »

  1.   

    应该是你在写SQL代码是出现了,问题,试试清除插入的代码在编辑时
      

  2.   

    插入的代码写在insertsql里面的。和deletesql,modifysql一起都写在updatedsql里面的
    保存的时候applyupdates这样。有问题吗
      

  3.   

    with Qry_RKD0, Qry_RKD1, Qry_QTF do begin
      这段代码是的   Qry_RKD0, Qry_RKD1, Qry_QTF都是query的话,用with 时,下面
     edit,指向的是Qry_RKD0后面Qry_RKD1是没有办法执行的我的建意的 再定义一个Procedure procedure TF_INPUT.btn_saveClick(Sender: TObject);
     prucedure SaveData(DataSet:TAdoQuery);
     begin
      with DataSet do begin
        CalcuHJJE;
        Edit;
        if state in[dsEdit, dsInsert] then
        try
          begin
              ApplyUpdates;
          end;
        except begin
        end;
        end;
      end;  
     end;
    begin
      try//加入事务处理,就更好了,我就不多写了
         SaveData(Qry_RKD0);
         SaveData(Qry_RKD1);
         SaveData(Qry_QTF);
      except   end;
    end;
      

  4.   

    我发现不是保存的问题,是这个给记录加序号的过程在作怪,可是我看不出问题
    procedure TF_INPUT.SetRecordNo;
    var i: integer;
    begin
      with Qry_RKD1 do begin
        First;
        for i := 1 to RecordCount do begin
          Edit;
          FieldByName('RecordNo').AsInteger := i;
          next;
        end;
      end;
    end;
    当我执行完这个过程再保存的时候就会把修改的记录重复插入一次,而不是保存修改后的数据。没执行这过程就没问题。晕
      

  5.   

    那不就是你的SQL语句中insert和update写混了嘛