procedure TForm1.BitBtn1Click(Sender: TObject);
begin    StatusBar1.SimpleText := '正在查询......';
    BitBtn1.Cursor := crSQLWait;
    Form1.Refresh;
    sleep(10);
    adoquery1.Close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('select a.com_code,a.name, a.memo , "1*" || to_char(a.bzhl),sum(a.sl) ,round(a.bhspfj,4), round(sum(a.lsje*(1-a.xxtax)),4),round(1/(1-  a.xxtax  )-1,2)*100 || "%",round(sum(a.lsje-a.lsje*(1-a.xxtax)),4),c.shdw,d.name');
    adoquery1.SQL.Add(' from inv_pf_com a,inv_pf_doc c,pfs d');
    adoquery1.SQL.Add('where a.seqno in ( ');
    adoquery1.SQL.Add(' select * from ls_xs ) ');
    adoquery1.SQL.Add('and a.seqno=c.seqno');
    adoquery1.SQL.Add('and c.shdw=d.code');
    adoquery1.SQL.Add('group by c.shdw,d.name,a.com_code,a.name,a.memo ,"1*" || to_char(a.bzhl),round(a.bhspfj,4), round(1/(1-  a.xxtax  )-1,2)||"%+"');
    adoquery1.SQL.Add('order by a.com_code');    adoquery1.ExecSQL;    Form1.DBGrid1.Columns.Items[0].Title.caption := '商品编码' ;
    Form1.DBGrid1.Columns.Items[0].Width := 80;
    Form1.DBGrid1.Columns.Items[1].Title.caption := '商品名称';
    Form1.DBGrid1.Columns.Items[1].Width := 200;
    Form1.DBGrid1.Columns.Items[2].Title.caption := '条码';
    Form1.DBGrid1.Columns.Items[2].Width := 60;
    Form1.DBGrid1.Columns.Items[3].Title.caption := '规格';
    Form1.DBGrid1.Columns.Items[3].Width := 60;
    Form1.DBGrid1.Columns.Items[4].Title.caption := '出货数量';
    Form1.DBGrid1.Columns.Items[4].Width := 80;
    Form1.DBGrid1.Columns.Items[5].Title.caption := '不含税价格';
    Form1.DBGrid1.Columns.Items[5].Width := 100;
    Form1.DBGrid1.Columns.Items[6].Title.caption := '不含税金额';
    Form1.DBGrid1.Columns.Items[6].Width := 100;
    Form1.DBGrid1.Columns.Items[7].Title.caption := '税率';
    Form1.DBGrid1.Columns.Items[7].Width := 60;
    Form1.DBGrid1.Columns.Items[8].Title.caption := '税金';
    Form1.DBGrid1.Columns.Items[8].Width := 100;
    Form1.DBGrid1.Columns.Items[9].Title.caption := '客户代码';
    Form1.DBGrid1.Columns.Items[9].Width := 80;
    Form1.DBGrid1.Columns.Items[10].Title.caption := '客户名称';
    Form1.DBGrid1.Columns.Items[10].Width := 250;    StatusBar1.SimpleText := '共 ' + inttostr(adoquery1.RecordCount) + ' 条记录';
    BitBtn1.Cursor := crDefault;
 
end;上面一段代码,哪里有问题?为什么总是显示invalid column name‘。
请各位大侠不吝赐教。有分哦!

解决方案 »

  1.   

    跟踪到这里adoquery1.ExecSQL;
    就报错
      

  2.   

    你的sql语句有问题,所要显示的列在下边的查询中不存在,你在sql查询分析器里先执行以下看看,这样的语句最好写成存储过程,然后调用,维护方便
      

  3.   

    这个sql语句在sql查询分析器执行没有问题
      

  4.   

    "1*"   "%"  注意以下这两个地方的引号,如果你这样写 delphi将会对"其转为'
      

  5.   

    %+  这个+号是做什么用的,,sql看起来真头痛
      

  6.   

    select a.com_code,a.name, a.memo , '1*' || to_char(a.bzhl),sum(a.sl) ,round(a.bhspfj,4), round(sum(a.lsje*(1-a.xxtax)),4),round(1/(1-  a.xxtax  )-1,2)*100||'%',round(sum(a.lsje-a.lsje*(1-a.xxtax)),4),c.shdw,d.name
    from inv_pf_com a,inv_pf_doc c,pfs d
    where a.seqno in (select * from ls_xs )
    and a.seqno=c.seqno
        and c.shdw=d.code
        group by c.shdw,d.name,a.com_code,a.name,a.memo ,to_char(a.bzhl),round(a.bhspfj,4), round(1/(1-  a.xxtax  )-1,2)
       order by a.com_code
      
    这段代码是没有问题的,要如何加进去。
      

  7.   

    var
      sqlstr:string;
    begin
    sqlstr:='select a.com_code,a.name, a.memo , ''1*'' || to_char(a.bzhl),sum(a.sl) ,round(a.bhspfj,4), round(sum(a.lsje*(1-a.xxtax)),4),round(1/(1- a.xxtax )-1,2)*100||''%'',round(sum(a.lsje-a.lsje*(1-a.xxtax)),4),c.shdw,d.name from inv_pf_com a,inv_pf_doc c,pfs d where a.seqno in (select * from ls_xs ) and a.seqno=c.seqno and c.shdw=d.code group by c.shdw,d.name,a.com_code,a.name,a.memo ,to_char(a.bzhl),round(a.bhspfj,4), round(1/(1- a.xxtax )-1,2) order by a.com_code';adoquery1.SQL.Add(sqlstr);
      

  8.   

    谢谢!
    这样要分成两个sqlstr,一个要超过255的限制。这个问题已经解决。
    现在又出现list index out of bounds(1)