如题,如何在一个窗体按查询条件查询结果显示在另一个窗体,而查询窗体自动消失
在另一个窗体的dbgride显示符合条件的记录,我写的代码执行出错

解决方案 »

  1.   

    hide
    或者销毁,在第二窗体上添加数据集变量
      

  2.   

    这个应该不难,控制窗体的visible,你的代码哪里出错了
      

  3.   

    我一执行,显示结果的窗体确实是成当面的窗体了,但查询的窗体在后面没有消失。
    procedure TfoundForm.btn1Click(Sender: TObject);begin
      try
    if (chk1.Checked)and (qzid1.Text<>'') then
    begin
    DataModule3.ADO_Temp.Close;
    DataModule3.ADO_Temp.SQL.Text:='select * from message_message where qzid='''+trim(qzid1.Text)+'''';
    DataModule3.ADO_Temp.Open;
    Form2.ds1.DataSet:=DataModule3.ADO_Temp;form2:=Tform2.create(nil);
    form2.showmodal;
    form2.Free;
    Visible:=True;
    //foundForm.Close;
    end
    else
    begin
    ShowMessage('请选择正确的查询条件!');
    end;
    except
      ShowMessage('查询失败');
    end;
    end;
      

  4.   

    兄弟,你的顺序错了
    Form2.ds1.DataSet:=DataModule3.ADO_Temp; form2:=Tform2.create(nil); 你的form2还没create呢,你怎么就给他的成员赋值了?
    呵呵,这两句换下顺序试试看
      

  5.   

    在查询窗体中声明一个类方法,返回一个布尔值,以区分用户是"Cancel"关闭窗体还是"OK"关闭窗体的,同时需要有一个输出参数,用于返回用户输入的查询条件。在查询窗体中加入一个类方法Type
    TfrmSearch= class(TForm)
    public
      class function Execute(out: queryStr: String): Boolean;
    end;class function TfrmSearch.Execute(out: queryStr: String): Boolean;
    begin
      with TfrmSearch.Create(Application) do
      try
        Result := ShowModal = mrOk;
        if Result then queryStr := trim(qzid1.Text) else queryStr := EmptyStr;
      finally
        Free;
      end;
    end;
    在Form1中如下调用:procedure TForm1.btn1Click(Sender: TObject);
    var
      queryStr: String;
    begin
      if TfrmSearch.Execute(queryStr) then begin
        DataModule3.ADO_Temp.Close;
        DataModule3.ADO_Temp.SQL.Text := Format('select * from message_message where qzid=''%s''', [queryStr]);
        DataModule3.ADO_Temp.Open;
        Form1.ds1.DataSet:=DataModule3.ADO_Temp;
      end;
    end;