窗体1中定义全局变量 
public
  xx:string;  { Public declarations }
  end;
给变量赋值并传给窗体2
procedure TForm1.DBGrid1dblclick(Sender: TObject);
begin
xx:=DBGrid1.SelectedField.DisplayText;
form2.Label2.Caption:=xx;
form2.Label1.Caption:=xx+'的情况如下';
form2.Show;
end;
窗体2中uses Unit1;
获取传递的值并执行操作!
procedure TForm2.FormCreate(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.sql.Clear;
ADOQuery1.SQL.Add('select * from ry where name='+quotedstr(form1.xx));//这里为什么取不到?
ADOQuery1.Open;
end;

解决方案 »

  1.   

    ADOQuery1.SQL.Add('select * from ry where name='''+quotedstr(form1.xx))+'''';//
      

  2.   

    高手帮助一下或指出错误所在!
    本程序意图是双击dbgrid一行(读者信息表),打开另一个窗口显示该读者更详细的情况!
      

  3.   

    ADOQuery1.SQL.Add('select * from ry where name='''+quotedstr(form1.xx))+''''是什么意思,我试改了一下,出错呀
      

  4.   

    问题是form1.xx是个空值,为什么?如何改?
      

  5.   

    ADOQuery1.SQL.Add('select * from ry where name='+quotedstr(form1.xx));
      

  6.   

    : wangwei_egw(egw) ,我原程序中就是这么写着呀!问题是forn1.xx是个空值!如何改?
      

  7.   

    在输入XX前 Form2.Create已经被调用过了。
    定到Form2.show中try try 呀
      

  8.   

    应该是因为你的Form2是自动创建的,在程序启动时就创建了,当然form1.xx不会有值了,
    你把
    ADOQuery1.Close;
    ADOQuery1.sql.Clear;
    ADOQuery1.SQL.Add('select * from ry where name='+quotedstr(form1.xx));//这里为什么取不到?
    ADOQuery1.Open;
    放到Form2.Onshow 中试试
      

  9.   

    你不应该写在create里,因为只是在创建时调用该过程
    或者在form1中
    xx:=DBGrid1.SelectedField.DisplayText;
    with tform2.create(nil) do
    begin
    try
    Label2.Caption:=xx;
    Label1.Caption:=xx+'的情况如下';
    ShowModal;
    finally
    Free;
    end;
    end;
      

  10.   

    不能在oncreate中定义
    应该在onshow中定义
      

  11.   

    form1和form2同时创建,所以在oncrate想取得form1中create后的变量值是不可能的
      

  12.   

    在form 创建时,所有该form的成员函数将初始化,即默认值,所以xx为空值。
    在程序启动的时候启动oncreate事件
    所以不能在oncreate事件添加代码,应在noshow事件里添加
    ADOQuery1.Close;
    ADOQuery1.sql.Clear;
    ADOQuery1.SQL.Add('select * from ry where name='''+quotedstr(form1.xx)+'''');//这里为什么取不到?
    ADOQuery1.Open;
    注意ADOQuery1.SQL.Add('select * from ry where name='''+quotedstr(form1.xx)+'''');
    后面应该加多几个“'”,要不然,数据传到SQL服务器后会变成 name=未知变量,而不是等于字符串。
      

  13.   

    各位哥哥,是不是楼主的代码逻辑上有错误啊,在procedure TForm1.DBGrid1dblclick(Sender: TObject);中FORM2并没有创建啊,此时如何访问到FORM2,xx:=DBGrid1.SelectedField.DisplayText;
    form2.Label2.Caption:=xx;
    form2.Label1.Caption:=xx+'的情况如下';
    form2.Show;