//a[i]中存储了一些字符串,从数据库中找到field2等于a[i]的纪录,sum它的sl列,
str:='';
for i:=1 to 5 do
begin
  adoquery3.Parameters.AddParameter;
  adoquery3.Parameters[i-1].Name:='a'+inttostr(i);
  adoquery3.Parameters[i-1].Value:=a[i];
  str:=str+',sum(iif('+fdstr1+'=:a'+inttostr(i)+',sl,)) as ['+a[i]+']';
end;
str:='select '+field1+str+' from tem2 group by......';     
adoquery3.SQL.Clear;
adoquery3.SQL.Add(str);
adoquery3.ExecSQL;
//程序运行报错,说parameter错误,哪儿错了呢?

解决方案 »

  1.   

    老兄,你顺序颠倒了,需要先写完sql语句,然后才能使用Parameters来赋值。
      

  2.   

    改成这样也不行啊?for i:=1 to k do
    begin
    str:=str+',sum(iif('+fdstr1+'=:a'+inttostr(i)+',sl,)) as ['+a[i]+']';
    end;
    str:='select '+fdstr2+',sum(sl) as 合计'+str+' into tem3 from tem2 group by '+fdstr2;  for i:=1 to k do
        begin
      adoquery3.Parameters.AddParameter;
      adoquery3.Parameters[i-1].Name:='a'+inttostr(i);
      adoquery3.Parameters[i-1].Value:=a[i];
        end;
      

  3.   

    我刚刚也遇到着个问题,花了我一天的时间啊,我最后发现是我的SQL有问题,在查询分析器里可以通过的语句放在DELPHI中时有的就不行.所以你要从你最后生成的SQL语句来入手.
      

  4.   

    参数赋值前,要先设置其参数数据类型:
    adoquery3.Parameters.(...).DataType:=ftString;
      

  5.   

    先sql.add,然后给parameters负值,出现新问题,说parameter 'a2'没找到
      

  6.   

    生成的sql语句没有错,给parameter负值的时候,a1可以,a2就找不到了,这是为什么呢?
      

  7.   

    adoquery3.ExecSQL 改成 adoquery3.open试试
      

  8.   

    wengj() :你可以不帮忙,但是也没必要说风凉话。