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