如何将下面长的语句加入ADOQuery中,用
  with ADOQuery1 do
  begin
    SQL.Text:='.......';
    OPen;
  end;就是这些语句
declare  @sql  varchar(8000)  
set  @sql  =  'select  学号,姓名,班级,学期'  
select  @sql  =  @sql  +  ',max(case  科目名称  
when  '''+科目名称+'''  then  cast(成绩 as varchar(10)) end)   ['+科目名称+']
,max(case  科目名称  when  '''+科目名称+'''  then  cast(补考 as varchar(10))  end)  ['+科目名称+'补考]'  
   from  (select  distinct  科目名称  from  成绩表 where 班级='2000电算会计')   as  a  
select  @sql=@sql+' from  成绩表  where 班级=''2000电算会计'' and 学期=1 group by  学号,姓名,班级,学期'
exec(@sql)  

解决方案 »

  1.   

    写成存储过程,然后再在delphi中调用
      

  2.   

    不要使用sql.text语句,可以使用sql.add()来添加
    例如要在sql中写下列语句:
    select * from tablename
    where id=123
    order by id;在delphi中:
    sql.clear;
    sql.add('select * from tablename');
    sql.add('where id=123');
    sql.add('order by id;');
    至于你的程序,你自己照这个方式写写试试
      

  3.   

    存储过程修改方便 几乎是最省事的方法
    楼上的方法也可以
    另外提供一种
    cSql :='select * from fieldName=%s';
    query.sql.text := format(cSql,[****]);
    可以传参数楼主的建议用存储过程
    其他的好处不说 单调试就可节约不少时间
      

  4.   

    存储过程是首选,如果你懒的话,就在delphi里一行一行敲吧!记得用sql->Add,不要用sql->Text,text容易出错
      

  5.   

    只是一条简单的sql查询,没有必要用存储过程,也不能提高什么效率,建议用视图。
    在delphi中的实现
    var tsql:string;
    begin
    tsql  :=  'select  学号,姓名,班级,学期'  ;
    tsql  :=  tsql  +  ',max(case  科目名称  
    when  '''+科目名称+'''  then  cast(成绩 as varchar(10)) end)   ['+科目名称+']
    ,max(case  科目名称  when  '''+科目名称+'''  then  cast(补考 as varchar(10))  end)  ['+科目名称+'补考]'  
       from  (select  distinct  科目名称  from  成绩表 where 班级='2000电算会计')   as  a  
    select  @sql=@sql+' from  成绩表  where 班级=''2000电算会计'' and 学期=1 group by  学号,姓名,班级,学期' with ADOQuery1 do
      begin
        SQL.Add(tsql);
        OPen;
      end;
      

  6.   

    部队,你自己给的sql运行语句就有问题!
    var tsql:string;
    begin
    tsql  :=  'select  学号,姓名,班级,学期'  ;
    tsql  :=  tsql  +  ',max(case  科目名称  
    when  '''+科目名称+'''  then  cast(成绩 as varchar(10)) end)   ['+科目名称+']
    ,max(case  科目名称  when  '''+科目名称+'''  then  cast(补考 as varchar(10))  end)  ['+科目名称+'补考]'  ;
    tsql:=tsql+' from  成绩表  where 班级=''2000电算会计'' and 学期=1 group by  学号,姓名,班级,学期'; with ADOQuery1 do
      begin
        SQL.Add(tsql);
        OPen;
      end;--------------------------------------
    看见了么,
    那支蛾子,
    正飞向太阳,
    那就是我!
    --------------------------------------
      

  7.   

    text太长了会出现问题,我碰到过,
    用add!
      

  8.   

    firetoucher(风焱) 我的句子没有问题,是你写的程序有问题。。第二个赋值句子就有问题
      

  9.   

    sorry,明白你的意思了,是我理解错了:)
    用adoquery的确比较麻烦,因为你要用循环,楼上说得不错,用存储过程吧
    create proc urporc(
    @name varchar(100)
    ) asdeclare  @sql  varchar(8000)  
    set  @sql  =  'select  学号,姓名,班级,学期'  
    select  @sql  =  @sql  +  ',max(case  科目名称  
    when  '''+科目名称+'''  then  cast(成绩 as varchar(10)) end)   ['+科目名称+']
    ,max(case  科目名称  when  '''+科目名称+'''  then  cast(补考 as varchar(10))  end)  ['+科目名称+'补考]'  
       from  (select  distinct  科目名称  from  成绩表 where 班级=@name)   as  a  select  @sql=@sql+' from  成绩表  where 班级='''+ @name+''' and 学期=1 group by  学号,姓名,班级,学期'
    exec(@sql)  
    return程序中
    with ADOQuery1 do
      begin
        SQL.Add('exec urporc ''' + '2000电算会计' + '''' );
        OPen;
      end;