我要在两个窗体之间传递数据,和查询问题是这样的
我在窗体1上单击一个按钮,带着两个数据到窗体2,我要这两个数据中的一个做查询条件,
但我还要调用一个编辑按钮(窗体2上的按钮)的CLICK后才能查询数据,等窗体2,SHOW之前查出数据,在窗体2上显示,
请问用什么方法才能完成,代码写在哪个事件里,请指教谢谢大家,
我的窗体2是着个形式的大家看一下代码就知道了
procedure setbtnvisible;
begin
   Form_PF.Btn_Add.Visible := not(Form_PF.Btn_Add.Visible);
   Form_PF.Btn_del.Visible := not(Form_PF.Btn_del.Visible);
   Form_PF.Btn_Edit.Visible := not(Form_PF.Btn_Edit.Visible);
   Form_PF.Btn_Save.Visible := not(Form_PF.Btn_Save.Visible);
   Form_PF.Btn_Cancel.Visible := not(Form_PF.Btn_Cancel.Visible);
   Form_PF.Btn_Exit.Visible := not(Form_PF.Btn_Exit.Visible);
   Form_PF.EdtCode.Enabled := not(Form_PF.EdtCode.Enabled);
   Form_PF.EdtName.Enabled := not(Form_PF.EdtName.Enabled);
   Form_PF.Edtbz.Enabled := not(Form_PF.Edtbz.Enabled);
   Form_PF.StringGrid1.Enabled := not(Form_PF.StringGrid1.Enabled);
end;

解决方案 »

  1.   

    打开窗体2的时候传递两个参数,在窗体2的OnCreate事件中接受这两个参数就ok了
      

  2.   

    主要的主要,是在那里调用编辑按钮(窗体2上的按钮)的CLICK事件,
    我在show和,create中调用都有错误
      

  3.   

    要想调用编辑按钮(窗体2上的按钮)的CLICK事件必需必需保证form2已创建
    uses窗体2后就执行form2.Button1.Click;就可以了
      

  4.   

    在那个事件调用编辑按钮(窗体2上的按钮)的CLICK事件,我要在窗体SHOW时就查出数据显示出来意思就是,数据和窗体让用户同时看到
      

  5.   

    procedure TForm2.FormShow(Sender: TObject);
    begin
      Button1.Click;
    end;
      

  6.   

    你的意思就是在窗体1中调用窗体2,窗体2可以查询数据,查询条件来自于窗体1。介绍一个解决方法:
    窗体2中建立2个公共变量:var1,var2。
    窗体2中建立一个公共函数或者过程,该函数可以执行查询。ExecuteQuery。
    窗体2中放一个按钮。该按钮中调用ExecuteQuery。窗体1中建立一个函数来调用窗体2:
    procedure ExeForm2
    begin
      Form2.Var1:=...
      Form2.Var2:=...
      Form2.ExeCuteQuery;
      Form2.Show;
    end;
      

  7.   

    上面的可以,但是form2最好是动态创建,在form2关闭时执行Action:=caFree;动态销毁
      

  8.   

    procedure setbtnvisible;
    begin
       Form_PF.Btn_Add.Visible := not(Form_PF.Btn_Add.Visible);
       Form_PF.Btn_del.Visible := not(Form_PF.Btn_del.Visible);
       Form_PF.Btn_Edit.Visible := not(Form_PF.Btn_Edit.Visible);
       Form_PF.Btn_Save.Visible := not(Form_PF.Btn_Save.Visible);
       Form_PF.Btn_Cancel.Visible := not(Form_PF.Btn_Cancel.Visible);
       Form_PF.Btn_Exit.Visible := not(Form_PF.Btn_Exit.Visible);
       Form_PF.EdtCode.Enabled := not(Form_PF.EdtCode.Enabled);
       Form_PF.EdtName.Enabled := not(Form_PF.EdtName.Enabled);
       Form_PF.Edtbz.Enabled := not(Form_PF.Edtbz.Enabled);
       Form_PF.StringGrid1.Enabled := not(Form_PF.StringGrid1.Enabled);
    end;
    这段代码什么错误啊
      

  9.   

    我按照大家说的方法上面这段代码错误,
    Form_PF.Btn_Add.Visible := not(Form_PF.Btn_Add.Visible);直做这行
      

  10.   

    全部代码unit Frm_PF;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, ExtCtrls, Grids, DBGrids, DB, DBTables, ADODB;type
      TForm_PF = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        EdtCode: TEdit;
        EdtName: TEdit;
        Edtbz: TEdit;
        Panel1: TPanel;
        Btn_Add: TBitBtn;
        Btn_del: TBitBtn;
        Btn_Edit: TBitBtn;
        Btn_Save: TBitBtn;
        Btn_Cancel: TBitBtn;
        Btn_Exit: TBitBtn;
        StringGrid1: TStringGrid;
        Query1: TADOQuery;
        Label4: TLabel;
        Label5: TLabel;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Btn_SaveClick(Sender: TObject);
        procedure Btn_CancelClick(Sender: TObject);
        procedure Btn_delClick(Sender: TObject);
        procedure Btn_ExitClick(Sender: TObject);
        procedure Btn_AddClick(Sender: TObject);
        procedure Btn_EditClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure EdtCodeExit(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure EdtbzExit(Sender: TObject);
        procedure EdtCodeKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure EdtNameKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure EdtbzKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure EdtbzKeyPress(Sender: TObject; var Key: Char);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form_PF: TForm_PF;
      edit_flag:string;implementationuses frm_smxz, MD_prnsp, unit_var;
    {$R *.dfm}procedure setbtnvisible;
    begin
       Form_PF.Btn_Add.Visible := not(Form_PF.Btn_Add.Visible);
       Form_PF.Btn_del.Visible := not(Form_PF.Btn_del.Visible);
       Form_PF.Btn_Edit.Visible := not(Form_PF.Btn_Edit.Visible);
       Form_PF.Btn_Save.Visible := not(Form_PF.Btn_Save.Visible);
       Form_PF.Btn_Cancel.Visible := not(Form_PF.Btn_Cancel.Visible);
       Form_PF.Btn_Exit.Visible := not(Form_PF.Btn_Exit.Visible);
       Form_PF.EdtCode.Enabled := not(Form_PF.EdtCode.Enabled);
       Form_PF.EdtName.Enabled := not(Form_PF.EdtName.Enabled);
       Form_PF.Edtbz.Enabled := not(Form_PF.Edtbz.Enabled);
       Form_PF.StringGrid1.Enabled := not(Form_PF.StringGrid1.Enabled);
    end;procedure TForm_PF.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
       Action := caFree;
       Form_PF := nil;
    end;procedure TForm_PF.Btn_SaveClick(Sender: TObject);
    var
       i:integer;
       ssql:string;
    begin
       if self.StringGrid1.Cells[0,StringGrid1.rowcount-1]='' then self.StringGrid1.RowCount := self.StringGrid1.RowCount-1;
       if self.StringGrid1.RowCount<2 then
       begin
          showmessage('没有输入配方,请重新输入!');
          exit;
       end;
       if edit_flag='insert' then
       begin
          Data_prnsp.ADOConnection1.BeginTrans;
          try
             with query1 do
             begin
                close;
                sql.Clear;
                sql.Add('insert into yspf_main values('''+trim(EdtCode.Text)+''','''+trim(EdtName.Text)+''','+trim(edtbz.Text)+')');
                //prepare;
                execsql;
                close;
             end;
          except
             Data_prnsp.ADOConnection1.RollbackTrans;
             showmessage('保存颜色配方主表不成功,请仔细检查!');
             exit;
          end;
          for i:=1 to self.StringGrid1.RowCount-1 do
          begin
             ssql:='insert into yspf_detail values('''+trim(edtcode.Text)+''','''+trim(StringGrid1.Cells[0,i])+''','+trim(stringGrid1.Cells[2,i])+','+trim(stringgrid1.Cells[3,i])+')';
             try
                query1.Close;
                query1.SQL.Clear;
                query1.SQL.Add(ssql);
                //query1.Prepare;
                query1.ExecSQL;
             except
                data_prnsp.ADOConnection1.RollbackTrans;
                showmessage('保存颜色配方明细表出错,请仔细检查!');
                exit;
             end;
          end;
          query1.Close;
          Data_prnsp.ADOConnection1.CommitTrans;
       end;
       if edit_flag='update' then
       begin
          data_prnsp.ADOConnection1.BeginTrans;
          try
             with query1 do
             begin
                close;
                sql.Clear;
                sql.Add('update yspf_main set name='''+trim(EdtName.Text)+''',proportion='+trim(edtbz.Text)+' where code='''+trim(edtcode.Text)+'''');
                //prepare;
                execsql;
             end;
          except
             data_prnsp.ADOConnection1.RollbackTrans;
             showmessage('更新颜色主表出错,请仔细检查!');
             exit;
          end;
          ssql := 'delete from yspf_detail where  code='''+trim(edtcode.Text)+'''';
          try
             with query1 do
             begin
                close;
                sql.Clear;
                sql.Add(ssql);
                Execsql;
             end;
          except
             data_prnsp.ADOConnection1.RollbackTrans;
             showmessage('更新颜色明细表出错,请仔细检查!');
             exit;
          end;
          for i:=1 to self.StringGrid1.RowCount-1 do
          begin
             ssql := 'insert into yspf_detail values('''+trim(edtcode.Text)+''','''+trim(StringGrid1.Cells[0,i])+''','+trim(stringGrid1.Cells[2,i])+','+trim(stringgrid1.Cells[3,i])+')';
             try
                query1.Close;
                query1.SQL.Clear;
                query1.SQL.Add(ssql);
                //query1.Prepare;
                query1.ExecSQL;
             except
                data_prnsp.ADOConnection1.RollbackTrans;
                showmessage('更新颜色明细表出错,请仔细检查!');
                exit;
             end;
          end;
          query1.Close;
          data_prnsp.ADOConnection1.CommitTrans;
       end;
       if edit_flag='delete' then
       begin
          data_prnsp.ADOConnection1.BeginTrans;
          ssql := 'delete from yspf_main where code='''+trim(edtcode.Text)+'''';
          try
             query1.Close;
             query1.SQL.Clear;
             query1.SQL.Add(ssql);
             //query1.Prepare;
             query1.ExecSQL;
             query1.Close;
          except
             data_prnsp.ADOConnection1.RollbackTrans;
             showmessage('删除颜色主表出错,请仔细检查!');
             exit;
          end;
          ssql := 'delete from yspf_detail where code='''+trim(edtcode.Text)+'''';
          try
             query1.Close;
             query1.SQL.Clear;
             query1.SQL.Add(ssql);
             //query1.Prepare;
             query1.ExecSQL;
             query1.Close;
          except
             data_prnsp.ADOConnection1.RollbackTrans;
             showmessage('删除颜色附表出错,请仔细检查!');
             exit;
          end;
          data_prnsp.ADOConnection1.CommitTrans;
       end;
       showmessage('保存成功!');
       setbtnvisible;
    end;procedure TForm_PF.Btn_CancelClick(Sender: TObject);
    begin
     setbtnvisible;
    end;
      

  11.   

    你把procedure setbtnvisible;写到哪里了?运行这个过程时Form_PF窗体创建了吗?你不贴出来,那个知道?还有这段代码有什么意思,都是取反值?
      

  12.   

    是不是第二个窗口需要第一个窗口传过来的数据?你可以先定义两个public变量。
    比如第一个窗口名为:MainFrm
    Public
      Str,KeyStr:String;你在第二窗口里可以这样调用。
    MainFrm.Str
    MainFrm.KeyStr
    ....................................................
      

  13.   

    KAO,懒得说了
    好好学学好不好,
    还有,楼上的几个,不要误人好不好?
    type 
             formName=class(TForm)
             private
             public
             //这里不是摆设!
             end;
      

  14.   

    你窗体2里设置public,然后在窗体一里调用窗体2里public的声明的变量.
    在窗体2的onclick事件里,执行你自己想要执行的sql语句.这样就行了