各位大侠:
    我在一个查询窗口中调用一个子窗口显示查询结果,当第一次使用时无法显示查询结果,但之后再查询则能正确显示,请问如何解决?如果不使用判断子窗口是否打开,则每执行一次查询都会打开一个子窗口,有没有更好的解决方法?代码如下:
  query1.close;
  query1.sql.clear;
  query1.SQL.Add(strsql);  query1.open;
     //判断子窗口是否打开
  if Assigned(jjc_list1) then
  begin
    if isiconic(jjc_list1.handle) then showwindow(jjc_list1.handle,sw_restore)
    else setforegroundwindow(jjc_list1.handle);
  end
  else
  begin
     if Application.FindComponent('jjc_list1')=nil then
      jjc_list1:=Tjjc_list1.Create(nil)
   else
     jjc_list1:=Tjjc_list1.Create(jjc_list1);
     end;
     jjc_list1.Left :=1;
     jjc_list1.top:=65;
     jjc_list1.StatusBar1.Panels[0].Text := '记录总数:'+inttostr(jjc_find1.Query1.RecordCount);
     jjc_list1.Show;
jjc_find1.Query1.RecordCount和query1.SQL.Add(strsql)中的query是同一个,
jjc_find1中的query是在jjc_list1创建之前就开始查询的,如果不使用判断子窗口是否打开则可以正确显示,但每执行一次查询都会打开一个新的显示结果子窗口,加上判断之后就会第一次查询时没有显示结果,第二次之后就正常了。

解决方案 »

  1.   

    把你的子窗口。
    以SHOWMODAL方式显示。
    就可以了。比如按一下BUTTON显示子窗口。
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      application.create(tform2,form2);
      form2.showmodal;
      form2.free;
    end;
    form2就是子窗口。
      

  2.   

    如果使用showmodal,那我就不能在查询该信息时调用其他窗口了,有没有更好的办法解决。
      

  3.   

    把query1.close;
      query1.sql.clear;
      query1.SQL.Add(strsql);  query1.open;
    写在jjc_list1.StatusBar1.Panels[0].Text := '记录总数:'+inttostr(jjc_find1.Query1.RecordCount);之后,
         jjc_list1.Show;之前。试一下。
      

  4.   

    if Assigned(jjc_list1) then
      begin
        if isiconic(jjc_list1.handle) then showwindow(jjc_list1.handle,sw_restore)
        else setforegroundwindow(jjc_list1.handle);
      end
    ///////////  else这个else 去掉!
      

  5.   

    begin
         if Application.FindComponent('jjc_list1')=nil then
          jjc_list1:=Tjjc_list1.Create(nil)
       else
         jjc_list1:=Tjjc_list1.Create(jjc_list1);
         end;
         jjc_list1.Left :=1;
         jjc_list1.top:=65;
         jjc_list1.StatusBar1.Panels[0].Text := '记录总数:'+inttostr(jjc_find1.Query1.RecordCount);
         jjc_list1.Show;
     end;
    if Assigned(jjc_list1) then
      begin
        if isiconic(jjc_list1.handle) then showwindow(jjc_list1.handle,sw_restore)
        else setforegroundwindow(jjc_list1.handle);
      end