我想做个查询的界面,其中用到两个窗口 A--》显示查询的结果。B--》显示查询的条件供用户选择。我用一个全局变量把用户从B选择的结果用一个SQL语句表示。A根据SQL语句进行查询,然后显示出结果,
1)当用户从菜单中选择查询时,首选显示B窗口,然后A窗口显示结果
2)当用户从A窗口中按查询按钮时显示B窗口,然后A窗口显示结果
A  B 这样的关系,我该如何实现了.

解决方案 »

  1.   

    在B里面设置一个sting型的变量。根据客户的选择定制好SQL语句,放到这个string里面,然后在close事件里面去执行这个SQL语句,,然后在A里面显示结果集,比如让A的数据显示控件的数据集连接执行SQL语句的Query控件。比如;
    procedure TForm1.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      exec(sql);//执行SQL语句
      Tform2.ShowModal;
      close;
    end;
      

  2.   

    可以在B窗口中定义一个函数:
    ...
    function getfrm:string;
    ....
    function  TBfrm.getfrm:string;
    begin
       ...
       showmodal;
       result:=......//查询所生成的Sql语句
    end;然后就可在A窗口中通过调用B的getfrm函数进行查询了
    //注,当然如果将函数变成如下模型就更好了
    getfrm(var sql:string):boolean;
    这样通过变量sql可以得到Sql语句,并且可以通过函数返回是否为True来判断用户是否取消了查询操作
      

  3.   

    老大们,我的a窗口为一个fsMDIChild
    b为一个fsNormal用ShowModal不行啊!
      

  4.   

    干吗要用fsMDIChild?不用就可以的了,这里有不需要这个
      

  5.   

    问题解决了a窗口还是为一个fsMDIChild
     
    b.parent:=a;
    b.showmodal;
    b.free;
    b:=nil;