我现在做了一个程序,主程序上有一个ADOTable组件,暂 叫ADOT1,另一个程序上也有一个adoTable组件,暂叫ADOT2,两个组件连接着相同的数据表。当adot2对数据修改后发消息给主程序,主程序就用ADOT1遍历数据表,可是这时候却找不到ADOT2刚修改过的数据。不知道有没有什么办法能让adot2修改后立刻更新程序如下:
子程序其实是主程序调用的一个DLL后产生的一个窗体
子程序procedure TWakeupFrm.button1Click(Sender: TObject);
var
  h:HWND;
begin
  ado2.append;
  ...//给相应字段赋值
  ado2.post;  h:=findwindow(nil,'MainFrm');
  sendMessage(H,WU_UPDate,0,0);end;主程序:
procedure THTWPFFrm.WUUpdate(var Msg: TMessage); 《《这是一个消息处理
begin
  ado1.active:=true;
  while not ado1.eof do
  begin
  ...//相找子程序中增加的记录,可是找不到,显示RecordCount的值为未增加记录前的值
  end;end;不知有没有什么方法可以解决?

解决方案 »

  1.   

    ado1.active:=true;
    =>ado1.requery试试
      

  2.   

    ado1.close
    ado1.open一般情况下都不是实时更新的,如果需要最新的数据,只能关闭并打开。
      

  3.   

    我对adot1和adot2,都做了close、open、Refresh之后发了消息都不行!!!问题依旧
      

  4.   

    在adot1修改完之后将adot2关闭之后又打开即可。或者刷新一下也可
      

  5.   

    adot1收到消息后要刷新一下。
      

  6.   

    刷新不行,我对adot1都关闭重打开又刷新都不行
      

  7.   

    如果等2秒钟后,对adot1进行一次关闭再打开,就可以!!刷新不行,有什么办法能缩短这两秒钟的时间??
      

  8.   

    把两个AdoTable都关闭一下!然后再打开,你再看看!
      

  9.   

    procedure TWakeupFrm.button1Click(Sender: TObject);
    var
      h:HWND;
    begin
      ado2.append;
      ...//给相应字段赋值
      ado2.post;  //===========
      conn.close; //conn是与ado2相连的tadoconnection,用这条语句试试
      //===========  h:=findwindow(nil,'MainFrm');
      sendMessage(H,WU_UPDate,0,0);end;主程序:
    procedure THTWPFFrm.WUUpdate(var Msg: TMessage); 《《这是一个消息处理
    begin
      //===========
      conn.close;
      conn.open //conn是与ado1相连的tadoconnection
      ado1.open
      //===========
      while not ado1.eof do
      begin
      ...//相找子程序中增加的记录,可是找不到,显示RecordCount的值为未增加记录前的值
      end;end;
      

  10.   

    试了,不行!!!
    不是不ado的写盘速度太慢啊!!
      

  11.   

    要不你干脆把ADOConnection也断开重新连接一下试试还有一种可能就是你是不是用了BatchUpdate,如果是的话,在Post之后还要ApplyUpdates一下