delphi 输入列名后用sum求和

下面的代码哪里错了,要怎么改
procedure TForm1.Button1Click(Sender: TObject);
var
a:array of string;
i,j:integer;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select 品种 from tb ');
ADOQuery1.Open;

setlength(a,ADOQuery1.Recordcount);//设置数组宽度
i:=0;//初始化下标
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
a[i]:=ADOQuery1.FieldList[0].AsString;
Inc(i);
ADOQuery1.Next;
end;
if ADOQuery1.RecordCount>0 then
begin
for i:=0 to ADOQuery1.RecordCount-1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('update '+edit2.text+' set 总盈利 =(select sum ('+a[i]+') from '+edit1.Text+') where 品种='+quotedstr(a[i]));
ADOQuery1.ExecSQL;
ADOQuery1.Next;
end;
end;
end;
运行后错误提示是:sum 聚合函数不能以 varchar 类型作为参数

if ADOQuery1.RecordCount>0 then
begin
for i:=0 to ADOQuery1.RecordCount-1 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('update '+edit2.text+' set 总盈利 =(select sum ('+a[i]+') from '+edit1.Text+') where 品种='+quotedstr(a[i]));
ADOQuery1.ExecSQL;
ADOQuery1.Next;
end;
end;

ADOQuery1重复用了哈 你又要拿来循环,又要拿来执行东西。。你第一次执行完 ADOQuery1 这个就已经不是你原来的那个 ADOQuery1 了。。还有一点 你最好先打印出你要执行的 update 语句出来看看 这个有助于分析,你的update里面的 sum(a[i]) 这里面应该是字段名,而a[i]应该是每个字段字,所以这里也有可能是错的

建议你打印出来你的update语句看看
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-08
数据库中的数据类型出错了,求和的话不能用varchar类型的,建议将表tb中的相应数据类型做相应的修改。
相似回答