各位大哥哥:
  我在FORM1上设置一系列的控件来给用户设置’查寻条件‘,FORM2上放置QUERY及DOTASOURSE控件及DBGRID控件,想通过FORM1来给FORM2的QUERY配置查找参数,可QUERY总是接收不到FORM1上的参数。我该怎么办呢?
  简单的我就是想问:如何在某个窗体源文件(.pas)定义一个变量,使另一个窗体能够共享(或说是‘接收到’)这个变量值呢?应该在哪个地方声明变量呢?(interface部分里?....)
  求教!求教!

解决方案 »

  1.   

    在form1 uses form2
    然后使用from2.query1访问query2上得query
      

  2.   

    在form2的implememtation里面
    加上:
    use form2
    就可了
      

  3.   

    Var  Form1 : TForm1 ;
      i : Integer ;
      

  4.   

    不行啊。
    我早试了此方法。
    可总是变量的值传送不到
    因为FORM1上的数值我都是通过其上的一个BUTTON-ON CLICK事件来赋给变量。我怀疑FORM2的QUERY之所以收不到FORM1的参数就是因为我给那些全局变量赋值是在PROCUDE BUTTONONCLICK事件过程中赋于的----会不会是这个原因呢?
      

  5.   

    Var  Form1 : TForm1 ;
      i : Integer ;  //变量定义在这儿
    uses ThisUnit ;
      

  6.   

    代码可不可以看看 ?只要定义不再私有、保护区,uses 后都可以访问
      

  7.   

    OK.
    这是FORM1的源代码:
    unit FindRegi;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      T_FindRegi = class(TForm)
        GroupBox1: TGroupBox;
        GroupBox2: TGroupBox;
        CheckBox1: TCheckBox;
        CheckBox2: TCheckBox;
        CheckBox3: TCheckBox;
        CheckBox4: TCheckBox;
        CheckBox5: TCheckBox;
        CheckBox6: TCheckBox;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Edit6: TEdit;
        RadioButton1: TRadioButton;
        RadioButton2: TRadioButton;
        RadioButton3: TRadioButton;
        Edit7: TEdit;
        Edit8: TEdit;
        Edit9: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);  private
        { Private declarations }
      procedure kfind(x:integer);  public
        { Public declarations }
      end;var
      _FindRegi: T_FindRegi;
      mysql1:string;
      mysql2:string;
      
    implementationuses FindResult;
    {$R *.dfm}procedure T_FindRegi.Button2Click(Sender: TObject);
    begin
    close;
    end;
    procedure T_FindRegi.Button1Click(Sender: TObject);
    begin
    mysql1:='select * from fa.register where ';
    kfind(1);
    close;
    _findresult.show;
    end;procedure T_findregi.KFind(x:integer);
    begin
    if checkbox1.checked=true then
      begin
      mysql1:=mysql1+'帐号=:zh ';
      mysql2:=edit1.text;
      end;
    end;end.
    这是FROM2的源代码:
    unit FindResult;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids;type
      T_FindResult = class(TForm)
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        Query1: TQuery;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      _FindResult: T_FindResult;implementationuses FindRegi;{$R *.dfm}procedure T_FindResult.FormCreate(Sender: TObject);
    begin
    query1.Close;
    query1.SQL.Clear;
    query1.sql.Add(findregi.mysql1);
    Query1.ParamByName('zh').asfloat:=strtofloat(findregi.mysql2);
    query1.Open;
    end;procedure T_FindResult.Button3Click(Sender: TObject);
    begin
    close;
    end;procedure T_FindResult.Button1Click(Sender: TObject);
    begin
    _findregi.Show;
    end;end.
      

  8.   

    执行结果总是:
     先弹出一个错误提示框:'''is not a 有效的 floating value '
     然后,FROM1 botton1 click后,form2的dbgrid里什么也没有显示why??????
      

  9.   

    建一个无窗体的单元专门放全局变量,然后在每个要用到全局变量的单元写USE该单元即可。例如:
    unit syst1;interface
      var
       namec,passc,syspassc,delpass1,czname1,dnamec:string;implementationend.
      

  10.   

    findregi.mysql2 ---- mySql2 直接用
      

  11.   

    var
      _FindRegi: T_FindRegi;
      mysql1:string;
      mysql2:string;----------------------------------mysql2 不从属于对象FindRegi
      

  12.   

    在Unit1中的implementation部分加入:
    use from2;
      

  13.   

    procedure T_FindResult.FormCreate(Sender: TObject);
    begin
    query1.Close;
    query1.SQL.Clear;
    query1.sql.Add(findregi.mysql1);
    //Query1.ParamByName('zh').asfloat:=strtofloat(findregi.mysql2);Query1.ParamByName('zh').asfloat:=strtofloat(mysql2);  //不行 ?
    query1.Open;
    end;
      

  14.   

    那_FindResult的query能否接收到mysql2传递的param参数呢????
      

  15.   

    还有几个问题:
      我的一个QuickRep控件上的DetailBank,上面放有几个QRDBText(显示字段的),可打印出来的行距(每次记录之间的距离)太大了,能否弄小呢?而有打印出来的并不是表格形式啊,每条记录之间并没有像Excel它们那样有线条将它们分开啊?????
      

  16.   

    还有, 请质子哥看看这个:
     unit RegiEdit;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, DB, DBTables, Grids, DBGrids;type
      T_RegiEdit = class(TForm)
        DBNavigator1: TDBNavigator;
        Button1: TButton;
        Button3: TButton;
        DataSource1: TDataSource;
        Table1: TTable;
        DBGrid1: TDBGrid;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
       private
        { Private declarations }
      public
        { Public declarations }
      end;var
      _RegiEdit: T_RegiEdit;implementation{$R *.dfm}
    procedure T_RegiEdit.FormCreate(Sender: TObject);
    begin
    table1.Open;
    table1.Active:=true;
    table1.edit;
    end;procedure T_RegiEdit.Button1Click(Sender: TObject);
    begin
    table1.Post;
    showmessage('修改操作成功!');
    table1.active:=false;
    table1.Close;
    close;
    end;end. 修改这个表的数据后,再次调用这个窗体察看时,为什么总是出现错误提示窗'table not in insert or edit 状态',然后dbgrid里又是什么也没有。
    不对啊,我不是已经在FormCreate里加上
    table1.Open;
    table1.Active:=true;
    table1.edit;
    了吗?按道理说每次该窗体被激活时,table1就被设置成edit状态啊。它怎么还提示我没在edit状态啊???????
      

  17.   

    刚才那个MYSQL2不行会不会是因为这一段啊:
    procedure T_findregi.KFind(x:integer);
    begin
    if checkbox1.checked=true then
      begin
      mysql1:=mysql1+'帐号=:zh ';
      mysql2:=edit1.text;
      end;
    end;
     在这个我自定义的过程赋值,使mysql2变量的值对_FindResult不可见啊???
      

  18.   

    你不使用带参数的SQL语句试一下,只需用一个全局变量即可。应该可以。
    procedure T_FindRegi.Button1Click(Sender: TObject);
    begin
    mysql1:='select * from fa.register where 帐号='''+edit1.text+'''';
    close;
    _findresult.show;
    end;procedure T_FindResult.FormCreate(Sender: TObject);
    begin
    query1.Close;
    query1.SQL.Clear;
    query1.sql.Add(findregi.mysql1);
    query1.Open;
    end;
      

  19.   

    我想应该也可以。
    但不可以用这种方法,因为我有很多的checkbox是对查询条件的选择,我得动态决定哪个查询条件是要加入的。实际上FORM1上还有很多的edit,所以我不能直接把某个edit里的值就赋给SQL语句了!而必须利用变量
      

  20.   

    哇塞!这个问Easy,我都用过N+1遍了,你只要再另外定义一个Condition条件变量即可,点击Button1按钮中判断那个CheckBox选中就在Condition中加上相应的“字段='''+EditN.text+'''”,每两个之间用and or or 连接不就可以啦。不知道我有没有说清楚?
      

  21.   

    谢谢我想你说清楚了。
    但我得反应一段时间。。唉呀,怎么问题返回来了。我的确是这样像你所说的那样做的,但问题是如何传递这个condition变量值!!!