数据用dbgrid 显示,数据用TADOQuery 连接,当删除纪录后(用的是的ADOQuery2),我这样写代码
with ADOQuey1 do
begin
  close;
  end;
end;

解决方案 »

  1.   

    因為你的數據源沒有刷新,
    你把DBGrid刷新一下,或者重新打開ADOQuery,就可以了.
      

  2.   

    with adoquery1 do
    begin
      close;
      open;
    end;
    end;
      

  3.   

    ADOQuery1.Close;
            ADOQuery1.Open;
            showmessage('删除成功!');
    我就是这样做的
      

  4.   

    query显示的查询出来的数据,是记录集,如果你用query查询出一张table中的所有数据,并用dbgrid显示出来的话,如果后台有人删除table中的数据,你dbgrid中实显示不出来的,如果用table的话就不存在不可以刷新了
      

  5.   

    所以你用query删除数据后还要重新open了
      

  6.   

    删除之后:
    ADOQuery1.Close;
            ADOQuery1.sql.clear;
            ADOQuery1.sql.Add('select *from cop');
            ADOQuery1.Open;
            showmessage('删除成功!');
    我都这样了,还是不能立马更新
      

  7.   

    删除之后:
    ADOQuery1.Close;
            ADOQuery1.sql.clear;
            ADOQuery1.sql.Add('select *from cop');
            ADOQuery1.Open;
            showmessage('删除成功!');
    还是不能立马刷新
      

  8.   

    : IORILI(李少龙) 不存在你说的情况啊,应为是单用户的
      

  9.   

    因為你的數據源沒有刷新,
    你把DBGrid刷新一下,或者重新打開ADOQuery,就可以了.
      

  10.   

    道理是一样的哟:)因为用dbgrid显示query查询出来的数据,不直接反应数据库
    比如在你的机器上有两个程序同时访问table 开始的时候,都显示全部记录,如果一个程序执行了删除操作,但在另一个程序里是不能反映出来的,
      

  11.   

    procedure TForm_xjyxx.Button3Click(Sender: TObject);
    var
      confirm:word;
    begin
      if dbgrid1.SelectedField.AsString<>''then
        begin
         confirm:=messagedlg('确实要删除这条记录吗?',mtconfirmation,[mbyes,mbno],0);
         if confirm=mryes then
          with ADOQuery2 do
          begin
           { Close;
            sql.Clear;
            sql.Add('select copid from data where copid='+quotedstr(dbgrid1.Fields[0].asstring));
            open;
            if eof=false then
              begin
                showmessage('清先删除该员工巡更信息!');
                exit;
              end;        Close;
            sql.Clear;
            sql.Add('select copid from xgbc where copid='+quotedstr(dbgrid1.Fields[0].asstring));
            open;
            if eof=false then
              begin
                showmessage('清先删除巡更班次中该员工的信息!');
                exit;
              end;
                        }
            Close;
            sql.Clear;
            sql.Add('delete from cop where copid='+quotedstr(dbgrid1.Fields[0].asstring));
            ExecSQL;
          end;
          with ADOQuery1 do
            begin
              Close;
              sql.clear;
              sql.Add('select *from cop');
              Open;
            end;
          showmessage('删除成功!');
        end
      else
        showmessage('请选择需要删除的巡检员!');
    end;
    这样子还不算重装数据吗
      

  12.   

    IORILI(李少龙)  有什么办法啊,我要在一个dgrid中显示和删除数据
      

  13.   

    adoquery1.UpdateBatch(arAll);
    adoquery1.Refresh;
      

  14.   

    : wolf_su(不系舟) :好像没反应,怎么会这么怪的问题
      

  15.   

    : wolf_su(不系舟) 
    说的也不可以用。
      

  16.   

    myboor(菜菜菜鸟) ,你也碰到这种问题吗
      

  17.   

    你要是用的DElphi5,则这是ADO的BUG,DEphi6应该没有
      

  18.   

    可是上面的方法我都试过了,??
    以前用odbc好像没类式问题
      

  19.   

    我遇到过你的问题,我是这么解决的。
    把ADOCONNECTION断开,然后在连接,在把adoquery.open.这样就可以了。我把代码写在下面:ADOCONNECTION2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='
            +ExtractFilepath(application.ExeName)+'playboy.mdb;';  
         adoconnection2.Connected :=true;adoquery11.Active:=false;
    adoquery11.Parameters.ParamByName('aid').Value:=nnd;
    adoquery11.Open;
    edit4.Text:=formatfloat('0.00',adoquery11.fieldbyname('sumbukuan').AsFloat);
    adoconnection2.Connected :=false;
    在怎么都不会有问题
      

  20.   

    关键的是在这:ADOCONNECTION2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='
            +ExtractFilepath(application.ExeName)+'playboy.mdb;';  
         adoconnection2.Connected :=true;
      

  21.   

    我用D6,只要close然后再open就可以刷新。
    一直这样用的。
      

  22.   

    active := false;
    active := true;
      

  23.   

    奇怪,.close;
         .open;
         应该能够解决的呀?!close的时候,数据源应该update了吧?你看当时数据库里的情况就知道了.