如果我通过adoquery查询到:
如果查询到“小王”有5列字段,那么Edit控件就显示Edit1、Edit2、Edit3、Edit4、Edit5。
如果查询得到“小李”有4列字段,那么Edit1-4的控件全部显示。
总字段不超过5个,所以怎么写代码?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
    begin
      for i := 0 to form1.ComponentCount-1 do
        if Components[i] is TEdit then
          TEdit(Components[i]).Visible:=
            strtoint(TEdit(Components[i]).Name[5])<=ADOQuery1.FieldCount;
    end;
      

  2.   

    或:
    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
    begin
      for i := 0 to 4 do
        if Components[i] is TEdit then
          TEdit(Components[i]).Visible:=
            strtoint(TEdit(Components[i]).Name[5])<=ADOQuery1.FieldCount;
    end;
      

  3.   

    噢,不行,要这样:
    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
    begin
      for i := 0 to form1.ComponentCount-1 do
        if (Components[i] is TEdit)and(TEdit(Components[i]).Name[5] in ['0'..'4']) then
          TEdit(Components[i]).Visible:=
            strtoint(TEdit(Components[i]).Name[5])<=ADOQuery1.FieldCount;
    end;
      

  4.   

    楼上能够告知下,下面的代码怎么改:
    procedure TForm2.Button2Click(Sender: TObject);
    var
    i:integer;
    sqlstr:string;
    begin
    ADOQuery3.Close;
    ADOQuery3.SQL.Clear;
    ADOQuery3.SQL.Add('select * from sheet1 where AAA = '''+trim(edit1.text)+'''');
    adoquery3.open; 了
    sqlstr:='';
    for i :=0 to ADOQuery3.FieldCount - 1 do
      if ADOQuery3.Fields[i].Text='是'  then sqlstr:=sqlstr+','+ADOQuery3.Fields[i].FieldName;
    sqlstr:='select '+sqlstr+' from sheet2  where AAA='''+ADOQuery3.fieldbyname('AAA').AsString+'''';
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    adoquery1.sql.add(sqlstr);
    adoquery1.open;
    end;procedure TForm2.Button3Click(Sender: TObject);
    var i:integer;
    begin
      for i := 0 to adoquery1.ComponentCount-1 do
        if (Components[i] is TEdit)and(TEdit(Components[i]).Name[5] in ['0'..'4']) then
          TEdit(Components[i]).Visible:= false;
    end;
    备注:上面的adoquery3是查询sheet1中AAA所在的一行,该行中单元格为“是”的列全部在adoquery1中显示。假如sheet1中有100个列字段,而AAA行单元格“是”的字段为5个,BBB行单元格“是”的字段是9个,CCC行单元格是“是”的12个。,不同的对应不同的字段。
    我想通过AAA最终查询出5个字段的话,EDIT控件就显示Edit1-Edit5,BBB最终查询9个字段的话,就显示Edit1-Edit9。Edit1-Edit9分别对应BBB查询的第1列到第9列字段。
    如何修改呢,谢谢!