保存事件:
procedure TFrm_ManageUser.Button1Click(Sender: TObject);
begin
   If (Edit1.Text<>'') And (Edit2.Text<>'') Then
     begin
        with ADOQuery1 do
          begin
            Close;
            SQL.Clear;
            SQL.Add('SELECT * FROM userinfo where name='+''''+Edit1.Text+'''');
            Open;
            If ADOQuery1.RecordCount>0 Then
               begin
                 showmessage('该信息已经存在!请重新输入!');
                 Edit1.Clear;
                 Edit2.Clear;
                 Exit;
               end;
               If X=1 then
                 begin
                   Insert;
                   X:=0;
                 end
                 else IF x=2 Then
                   begin
                      Edit;
                      X:=0;
                   end
                   Else
                     begin
                       Exit;
                     end;
              FieldByName('Name').AsString:=Edit1.Text;
              FieldByName('pass').AsVariant:=Edit2.Text;
              Post;
               end;
            Edit1.Clear;
            Edit2.Clear;
            ADOQuery1.SQL.Text:='SELECT * FroM userinfo';
            ADOQuery1.Open;
     end;
end;
修改事件:
procedure TFrm_ManageUser.Button2Click(Sender: TObject);
begin
  X:=2;
  ADOQuery1.Edit;
end;
先点Button2把数据在Edit1和Edit2中进行修改,然后点保存,为什么DBGrid1中显示的就是添加新的一行,没有达到修改的目的,以前的数据还是存在。

解决方案 »

  1.   

    每次保存时,ADOQuery1都会重新去查询一下记录是否存在,这已经改变了ADOQuery1中的数据集,你要改的记录已经不在了,而条件If X=1 可能总满足,导致一直是insert你把查询是否重复单独写一个方法,不用ADOQuery1,
      

  2.   

    就算满足,你修改的也不是你当初选中的记录,按我说的,你把查询是否重复单独写一个方法,不用ADOQuery1,
      

  3.   

    晕。又是你。因为你在执行:
    SQL.Add('SELECT * FROM userinfo where name='+''''+Edit1.Text+'''');
    搜查出来的结果为空。这时你的ADOQuery1内没有任何数据信息。你怎么修改?
      

  4.   

    修改的时候要先选中数据源中的某个数据。才能修改。
    现在你的数据源里面没有任何数据。当然就不能修改。只能作为新增POST进去!
      

  5.   

    其实上面bdmh已经说得比较清楚
    只要把提交(Post)和查询校验(检查重复记录)所用的ADOQuery分开就不会搞混掉了