在窗体上放两个Edit和两个ADOQuery连着同一个数据库,点击button1的时候我用ADOQuery1将edit1里的内容存到数据库,同时用ADOQuery2将数据库的内容显示在edit2里,但是奇怪的是每次点击button1的时候数据库里的内容是被修改了,但是Edit2里却总是显示数据库里旧的内容,我在点一下button2重新显示一下数据库里的内容就好使了有时需要多点几下button2,更奇怪的是我单步运行的时候就好使
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from 1 where ID=1');
    ADOQuery1.Open;
    if not ADOQuery1.Eof then
    begin
        ADOQuery1.Edit;
        ADOQuery1.FieldByName('num').AsString:=Edit1.Text;
        ADOQuery1.Post;
    end;
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add('select * from 1 where ID=1');
    ADoQuery2.Open;
    if not ADOQuery2.eof then
    begin
        Edit2.Text:=ADOQuery2.FieldByName('num').AsString;
    end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add('select * from 1 where ID=1');
    ADoQuery2.Open;
    if not ADOQuery2.eof then
    begin
        Edit2.Text:=ADOQuery2.FieldByName('num').AsString;
    end;
end;

解决方案 »

  1.   

    楼主 不会啊 我试了 没问题啊
    你在Edit2.Text:=ADOQuery2.FieldByName('num').AsString;前加一句:
    showmessage(ADOQuery2.FieldByName('num').AsString);不要单步调试,看看打出来的是什么?
      

  2.   

    TO jason(jason) 
    我试了你的方法还是不好使和我说的现象一样啊
      

  3.   

    是不是系统没有把它Edit2.Text及时更新
      

  4.   

    我的感觉就像ADOQuery1还没有来得及修改数据库的时候,ADOQuery2就把它读出来了
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
       qry : TADOQuery;
    begin
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('select * from 1 where ID=1');
        ADOQuery1.Open;
        if not ADOQuery1.Eof then
        begin
            ADOQuery1.Edit;
            ADOQuery1.FieldByName('num').AsString:=Edit1.Text;
            ADOQuery1.Post;
        end;
        Sleep(500);//如果你怀疑ADOQuery1还没有来得及修改数据库的时候,ADOQuery2就把它读出来了,就停半秒钟看看,这只是调试用
        qry :=  TADOQuery.Create(self);
        qry.Connection :=  ADOQuery1.Connection;
        qry.ConnectionString := ADOQuery1.ConnectionString;    qry.Close;
        qry.SQL.Clear;
        qry.SQL.Add('select * from 1 where ID=1');
        qry.Open;
        if not qryy2.eof then
        begin
            Edit2.Text:=qry.FieldByName('num').AsString;
        end;
    end;
      

  6.   

    TO jason(jason
    脚本什么意思
      

  7.   

    TO jason(jason)
    sleep(500)这方法确实好使,但是这是为什么啊
      

  8.   

    在ADOQuery1的AfterPost里试试:
        ADOQuery2.Close;
        ADOQuery2.SQL.Clear;
        ADOQuery2.SQL.Add('select * from 1 where ID=1');
        ADoQuery2.Open;
        if not ADOQuery2.eof then
        begin
            Edit2.Text:=ADOQuery2.FieldByName('num').AsString;
        end;
    去掉Button1Click给Edit2.Text赋值的语句,再看看
      

  9.   

    你放一个ADOConnection1,设置好它连接数据库的属性,并把其它的数据集控件Connection属性指向ADOConnection1。
      

  10.   

    TO jason(jason)在afterpost里也不好使
      

  11.   

    在语句ADOQuery1.Post;
    后加 Refresh 试试  在程序调试过程中用showmessage(变量);
    测试变量值
      

  12.   

    在显示时先把ADOQUERY CLOSE然后再OPEN;
      

  13.   

    用connection就好使了这是为什么呀
      

  14.   

    嗯 Access中是存在这个问题,有个时间差