如何将下面长的语句加入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)
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)
例如要在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;');
至于你的程序,你自己照这个方式写写试试
楼上的方法也可以
另外提供一种
cSql :='select * from fieldName=%s';
query.sql.text := format(cSql,[****]);
可以传参数楼主的建议用存储过程
其他的好处不说 单调试就可节约不少时间
在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;
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;--------------------------------------
看见了么,
那支蛾子,
正飞向太阳,
那就是我!
--------------------------------------
用add!
用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;