我有一段sql语句:
for i:=1 to 4 do
begin
sql.Add('select ' + dbgrid1.fields[i].FieldName + ' from 表 group by ' + dbgrid1.fields[i].FieldName);
sql.Add(' having count(distinct ' + adoquery1.fields[5].FieldName + ')=1');
adoquery1.Open;
end;
运行出错,请指教
for i:=1 to 4 do
begin
sql.Add('select ' + dbgrid1.fields[i].FieldName + ' from 表 group by ' + dbgrid1.fields[i].FieldName);
sql.Add(' having count(distinct ' + adoquery1.fields[5].FieldName + ')=1');
adoquery1.Open;
end;
运行出错,请指教
这样sql语句肯定不对。
而且from 表 group by也放在循环外面。
你可以在循环里用一个数组存放字段,循环完后在拼凑SQL语句。
然后查看SQL.TEXT的值是什么
这样,你可以知道错在什么地方了
var
i: Integer;
strSQL: string;
begin
for i:=1 to 4 do
begin
sql.Add('select ' + dbgrid1.fields[i].FieldName +
' from 表 group by ' + dbgrid1.fields[i].FieldName);
sql.Add(' having count(distinct ' + adoquery1.fields[5].FieldName + ')=1');
adoquery1.Open;
end;
//改为如下:
strSQL := ' having count(distinct ' + adoquery1.fields[5].FieldName + ')=1'; AdoQuery1.Close;
AdoQuery1.Sql.Text := 'Select ' + dbgrid1.fields[1].FieldName + ','
+ dbgrid1.fields[2].FieldName + ','
+ dbgrid1.fields[3].FieldName + ','
+ dbgrid1.fields[4].FieldName
+ ' from 表 group by '
+ dbgrid1.fields[1].FieldName + ','
+ dbgrid1.fields[2].FieldName + ','
+ dbgrid1.fields[3].FieldName + ','
+ dbgrid1.fields[4].FieldName
+ strSQL;
try
AdoQuery1.Open;
except
raise;
end;
end;
begin
close;
sql.clear;
sql.Add('select ' + dbgrid1.fields[i].FieldName + ' from 表 group by ' + dbgrid1.fields[i].FieldName);
sql.Add(' having count(distinct ' + adoquery1.fields[5].FieldName + ')=1');
adoquery1.Open;
end;
运行出错,请指教
里能实现,那就不会出现你所郁闷的问题了