各位大侠:
    我在一个查询窗口中调用一个子窗口显示查询结果,当第一次使用时打开查询结果显示窗口无法显示查询结果,返回记录为0,但之后再查询则能正确显示,请问如何解决?如果不使用判断子窗口是否打开,并且不把窗口设成子窗口则每执行查询都会打开一个窗口显示出正确的查询结果,有没有更好的解决方法?代码如下:
  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.   

    我只是查询数据,并不需要修改,用query1.execsql有什么作用,请指点!我的查询显示窗口的数据源等均正常,我想问题的所在是在于判断子窗口是否打开那里出了问题,但又不知如何设置正确的判断方法。
      

  2.   

    jjc_find1没有创建
    其上面的query1能用吗?gz!?
      

  3.   

    给你一个案例,自己思考一下,肯定有作用。换一种思路:
    多条件查询,在一个窗口上输入条件,在另外一个窗口上显示
    procedure TForm5.Button1Click(Sender: TObject);
    var
       Sql:String;
    begin
       Sql:='select * from 教师表,课程表 where (教师表.课程序号=课程表.课程序号) '
       if edit1.Text<>'' then
          SQL:=Sql + 'and (教师表.教师编号='+ edit1.Text +') ';
       if edit2.Text<>'' then
          SQL:=Sql +'and (教师表.教师姓名='+edit2.Text+') ';
       if combobox1.Text<>'' then
          SQL:=Sql +'and (教师表.所属院系='+combobox1.Text+') ';
       if combobox2.Text<>'' then
          SQL:=Sql +'and (课程表.课程名称='+combobox2.Text+')';
       if form6 = nil then
       begin
         Application.CreateForm(Tform6, form6);
         with form6 do
         begin
           adoquery1.close;
           adoquery1.sql.clear;
           adoquery1.sql.add(SQL);
           adoquery1.open;
         end;     form6.show;
       end
       else
       begin
       with form6 do
       begin
           adoquery1.close;
           adoquery1.sql.clear;
           adoquery1.sql.add(SQL);
           adoquery1.open;
       end;
       form6.Show;
     end;end;
      

  4.   

    你可以在查询窗口组合一个sql语句,传给显示窗口,在显示窗口执行sql语句。
      

  5.   

    你在显示查询结果 用的什么控件进行显示的【如果你用的是DBGRID的话你的代码好像有问题】图过不是 可以改变以下编程思想 不一定要每次CREATE结果窗体 可以将结果传递进去每次仅仅SHOW了
      

  6.   

    1 jjc_list1是怎么定义的
    2 为什么用jjc_find1.Query1.RecordCount而不是直接Query1.RecordCount?
    3 为什么创建是在这里,但你又使用的全局变量jjc_list1?
      

  7.   

    jjc_find1.Query1  =  query1  ?
    如果是同一个,那么在jjc_find1创建之前,query1是不能引用的