fare:=adoq.fieldbyname('farecode').asstring;  for i := 0 to afarelist.Count - 1 do
  begin
    sqlcolumnname := sqlcolumnname + ', sum([' + afarelist[i] + ']) as [' + afarelist[i] + ']';
    if afarelist[i]=fare then
      sqlcolumnvalue := sqlcolumnvalue + ' ,[' + afarelist[i] + '] = sum(payment) '
    else
      sqlcolumnvalue := sqlcolumnvalue + ' ,[' + afarelist[i] + '] = 0 ';
  end;  sqltext := 'select personcode as [姓名] '
              + sqlcolumnname + ' from (select personcode '
              + sqlcolumnvalue + ' from contract where farecode like '''
              + gathertype + '%'' group by personcode,farecode ) t1  group by personcode ';  showmessage(sqltext);  with AdoqGather do
  begin
    Close;    Sql.Text := sqltext;
    Open;
  end;
  adoq.Free;
end;错误提示是“参数[121]没有默认值” 怎么会这样?
语句出错在“sqlcolumnname := sqlcolumnname + ', sum([' + afarelist[i] + ']) as [' + afarelist[i]”这句
请各位大哥帮忙
我用的数据库是ACCESS

解决方案 »

  1.   

    你设置一个断点,单步执行一下,看看到sqlcolumnname := sqlcolumnname + ', sum([' + afarelist[i] + ']) as [' + afarelist[i]”这里的时候,你各个变量的值都是什么。可能是你循环造成的问题。
      

  2.   

    执行到
    sqltext := 'select personcode as [姓名] '
                  + sqlcolumnname + ' from (select personcode '
                  + sqlcolumnvalue + ' from contract where farecode like '''
                  + gathertype + '%'' group by personcode,farecode ) t1  group by personcode ';
    执行到在这里的时候select语句是这样的:select personcode as[姓名],sum([121]) as [121],sum([122]) as [122],sum([123]) as [123],sum([124]) as [124],sum([125]) as [125],sum([126]) as [126] from (select personcode,[121]=0,[122]=0,[123]=0,[124]=0,[125]=0,[126]=0 from contract where farecode like '12%' group by personcode,farecode) group by personcode
      

  3.   

    sum([' + afarelist[i] + ']) 就是代表这个
      

  4.   

    + afarelist[i] + '=[121] 是一个值