我的程序里面要在FormCreate时执行一条查询,根所查询的结果动态的添加菜单等操作,实现如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
  AstaClientSocket1.Active := True;  AstaClientDataSet1.Close;
  AstaClientDataSet1.SQL.Text := 'Select * From CustomMenu';
  AstaClientDataSet1.Open;
//  ShowMessage('有这句就正常');
  AstaClientDataSet1.First;
  while not AstaClientDataSet1.Eof do
  begin
    {执行相关操作}
    Caption := Caption+AstaClientDataSet1.FieldByName('Name').AsString;
    AstaClientDataSet1.Next;
  end;
end;
我的表和字段都是存在的,ShowMessage('有这句就正常');如果不屏蔽则正常,
我估计是AstaClientDataSet1.Open之后数据还没有真正取得,
ShowMessage后因为多花了时间,等关了ShowMessage时数据就取得了问题是现在我的程序不可能每次都这样弹出一个框才能用啊,一定有解决办法,请知道的兄弟不吝赐教。

解决方案 »

  1.   

    var
      i:Integer;
    begin
    .....
    i:=0;
    while True do
    begin
      if (AstaClientDataSet1.RecordCount>0) or (Inc(i)>1000) then
        break;
    end;  试试看行不行,如果取了1000次还不行,那就当出错处理吧
      

  2.   

    i:=0;
    while True do
    begin
      Inc(i) ;
      if (AstaClientDataSet1.RecordCount>0) or (I>1000000) then
        break;
    end;这样都不行
      

  3.   


    procedure TForm1.FormCreate(Sender: TObject);
    begin
      AstaClientSocket1.Active := True;  AstaClientDataSet1.Close;
      AstaClientDataSet1.SQL.Text := 'Select * From CustomMenu';
      AstaClientDataSet1.Open;
      Application.ProcessMessages;
      AstaClientDataSet1.First;
      while not AstaClientDataSet1.Eof do
      begin
        {执行相关操作}
        Caption := Caption+AstaClientDataSet1.FieldByName('Name').AsString;
        AstaClientDataSet1.Next;
      end;
    end;问题自己解决了,不知道取大数据量的时候能不能行,以后看看吧,看还有没有别人更好的解决方法。
      

  4.   

    在AstaCocketClient事件里,哪个事件是与服务器建立连接后返回的?我想在事件里写查询,可是连ClientConnect事件里写都查询不到??
      

  5.   

    异步模式是什么,在哪里可以设?我现在暂时解决了问题,那就是加个Timer,在FormShow后让Timer执行,执行完让Timer关闭。但我要的是能直接在LoginParamsAttempt里进行初始查询(看了下文档说是OnConnect里不能实现)办法应该是有的,不知道哪位兄台有用过不?
      

  6.   

    没人用过ASTA吗?我感觉不错啊,有用过的请不吝赐教.
      

  7.   

    将代码改到form load事件里
      

  8.   

    异步执行的动作你当同步来写当然出错了。
    试试
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      AstaClientSocket1.Active := True;  AstaClientDataSet1.Close;
      AstaClientDataSet1.SQL.Text := 'Select * From CustomMenu';
      AstaClientDataSet1.Open;
      sleep(1000);//停1秒
      AstaClientDataSet1.First;
      while not AstaClientDataSet1.Eof do
      begin
        {执行相关操作}
        Caption := Caption+AstaClientDataSet1.FieldByName('Name').AsString;
        AstaClientDataSet1.Next;
      end;
    end;