请问TControl(Components[I]).Name是什么类型的?到      ADOQuery1.Open;就出错,提示例名'LABEL2'无效。var
  i: integer;
  sComName: string;
begin
  for i:=0 to Frm_Design.ComponentCount-1 do
  begin
    if Components[i] is TControl then
    begin
      sComName:= TControl(Components[I]).Name;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('Select * From 窗体状态表 where 控件名称= '+ sComName);
      ADOQuery1.Open;//  TControl(Components[I]).Name:= ADOQuery1.FieldByName('控件名称').AsString;
  TControl(Components[I]).Left:= ADOQuery1.FieldByName('左').AsInteger;
   TControl(Components[I]).Top:= ADOQuery1.FieldByName('上').AsInteger;
  TControl(Components[I]).Height:= ADOQuery1.FieldByName('高').AsInteger;
  TControl(Components[I]).Width:= ADOQuery1.FieldByName('宽').AsInteger;
//  Components[I].ClassName:= ADOQuery1.FieldByName('类').AsString;
    end;
  end;
end;

解决方案 »

  1.   

    请问TControl(Components[I]).Name是什么类型的
    这个Name就是一个string。。看起来也没什么错误。。你把SQL语句放到后台执行一下看看。。
      

  2.   

    ADOQuery1.SQL.Add('Select * From 窗体状态表 where 控件名称= '+ sComName);需要判断数据集是否为空。 为空后面就不执行了
      

  3.   

    ADOQuery1.SQL.Add('Select * From 窗体状态表 where 控件名称= '+ QuotedStr(sComName));
      

  4.   

    为什么要加QuotedStr?加不加有什么区别?
      

  5.   

    查询时若字段为字符串类型要加QuotedStr(sComName),同#39+sComName+#39,即一对单引号
      

  6.   

    Select * From 窗体状态表 where 控件名称= 'Component_1'在↑正常的SQL句中、条件若是字符串時、是不是要用单引号括起来?
      

  7.   

    ADOQuery1.SQL.Add('Select * From 窗体状态表 where 控件名称= '''+ sComName + '''');
      

  8.   

    ADOQuery1.SQL.Add('Select * From 窗体状态表 where 控件名称= :Q');
    ADOQuery1.Parameters.ParamByName('Q').Value:=sComName;