form1上有二个edit,一个button1
两个eidt为选择的条件,根据条件,点击button1,弹出一个窗体form2,form2中根据这个动态的SQL语句中select出来的数据集赋给一个stringgrid.
procedure TForm1.Button1Click(Sender: TObject);
begin
form2:=Tform2.create(application);
form2.edit1.text:=form1.edit1.text;
form2.edit2.text:=form1.edit2.text;
from2.showmodal;
from2.colse;
end;
form2上的两个edit是隐藏的,目的是为了接受form1上的条件。
问题是:如果select * from table where a=edit1.text and b=edit2.text
的数据集是空的时侯,我不想弹出form2,只想showmessage('没有数据')
怎么样处理法?

解决方案 »

  1.   

    先在form1就查找一便,没有找到就不创建form2了
      

  2.   

    form1先查一遍,没有就showmessage('没有数据')
    有就生成form2.那form2还要select一遍,有没有办法把form1的select集合在from2中直接使用?
      

  3.   

    form2中uses form1所在的单元,则from1的所有对像包括数据集form2都可以使用.
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    //首先把条件传给adoquery1
    if adoquery1.recordcount>0 then
    begin
      form2:=Tform2.create(application);
      form2.edit1.text:=form1.edit1.text;
      form2.edit2.text:=form1.edit2.text;
    //把adoquery1的数据赋给stringgrid
      from2.showmodal;
    end
    else
    begin
      showmessage('没有数据!')
    end;
    end;
      

  5.   

    在FORM2的ONSHOW事件里,构造SQL语句,然后打开数据集,若其为空则显示提示信息(后CLOSE窗体),否则,显示FORM2,。。
      

  6.   

    我觉得yuhouyangguang(雨后阳光) 的解决方法比较好
      

  7.   

    在FORM里加个INITFORM方法,
    form2:=Tform2.create(self);
    form2.initform(....);
    form2.show;
      

  8.   

    楼上的说得差不多了。
    就是在 ButtonClick 中判断是否为空,若为非空,才创建 Form2。
    Form2 可以直接用 Form1 上的所有组件,只要用 uses UnitForm1
      

  9.   

    方法好多,其实最直接的也就是,在Form1中求出数据集,判断是否为空(adoquery1.recordcount=0),只有不为空,才创建显示Form2, 然后调用Form2上的一个方法initform(a:Tadoquery),要带一个Tadoquery类型的参数,把adoquery1传给它,读取数据显示在stringgrid上