现在窗体中有很多两个ComboBox控件(以2个为例,实际不止),首先说明一下ComboBox的值情况:
 ComboBox1控件中显示ADOQuery控件的各字段的DispyLabel值,ComboBox2显示运算符号如:=,>,<,<>等运算符!
我现在要实现下列功能:
1:我要程序自动识别,如果是如果ComboBox1中的值等于ADOQuery的DispyLabel值时,
  那么变量S=ADOQuery.DiplyLabel对应的ADOQuery1.Fieldname;
2:当循环所的ComboBox控件后,结果应是:ADOQuery1.Fieldname值+ComboBox2值!
各位我试了好久都没有成功!

解决方案 »

  1.   

    我把我要求再描述一下:比如:现在窗体中有3组窗体,其排列方式为:
        comboboxA1   comboBoxB1  editC1
            comboboxA2   comboboxB2  editC2
            comboboxA3   comboboxB3  editC3
    以上只列出三组,在实际操作是随意变化的,也就是控件个数不固定的!
    请各位注意:
         comboBoxA1,comboboxA2,comboboxA3控件主要是显示数据DisplayLabel              
         comboBoxB1,comboBoxB2,comboBoxB3主要是显示操作符如:<,>,<>,>=,<=,LIKE
         editC1,editC2,editC3主要是条件输入处!
       这样就形式了一个SQL语句:我打个比方:comboBoxA的DisplayLabel 对应的Fieldname 为'name',comboBoxB1的操作符为:'=',editC1的text值为:'张华',
       comboboxA2 的DisplayLabel 对应的Feildname为:'age',comboBoxB2,的操作符为:'='
       editC2的值为:20
       comboboxA3 的DisplayLabel 对应的Feildname为:'city',comboboxB的操作符为:'=',
       editC3的值为:'beijing'
      那么我现在根据前所选的值得到一个SQL语句:
        name:='张华'and age='20' and city='beijing'  我写了一段原码,但是不能实现上术所要得到的功能:望各位高手修改:  procedure TForm1.Button3Click(Sender: TObject);
    var i, j: integer;
    begin
      SQL := '';
      for i := 0 to Form1.ComponentCount - 1 do
      begin
        if Components[I] is TComboBox then
        begin
          for j := 0 to ADOQuery1.FieldCount - 1 do
          begin
            if TComboBox(Components[i]).Text =ADOQuery1.Fields[J].DisplayLabel  then
              temp:= ADOQuery1.Fields[j].FieldName+'  '
             else temp :=TComboBox(Components[i]).Text;
          end;
         sql := sql + temp;
        end;
        
        if Components[i] is TEdit then
        begin
          if copy(SQL, Length(SQL) - 4, 4) = 'LIKE' then
            SQL := SQL + TEdit(Components[i]).Text + '%'
          else SQL := SQL + TEdit(Components[i]).Text;
          if Copy(SQL, Length(SQL) - 3, 3) <> ' AND' then
            SQL := SQL + ' AND';
        end;
      end;
      SQL := copy(SQL, 1, Length(SQL) - 3);
      showmessage(SQL);
    end;