TAdoStoredProc 取得多数据集合的问题

lykq 2003-12-09 10:53:51
在存储过程中
creater proc proctest
as
select * form a
select * from b

如何用TAdoStoredProc取得返回的多个数据集合(是动态个数数据集),我不想使用临时表,然后连接到QuickReport报表, 显示,躬请各位赐教!
...全文
56 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lykq 2003-12-10
  • 打赏
  • 举报
回复
在数据苦中取得多行数据,格式为
select @week Zc, @courseDate courseDate, @weekday Xq, @amCourse AmCourse, @pmCourse PmCourse, @courseTime CourseTime, @teacher Teacher

我如何用union合并,不行吧, 要在delphi中访问整个数据集

存储过程如下:
create PROCEDURE ProcCourseQuery
(@PhaseId int, @termDate datetime)
AS
declare
@startDate Datetime, --开始时间
@endDate Datetime --结束时间

SELECT @startDate = Fd_Ksrq, @endDate = Fd_Jsrq FROM T_Jdjhb WHERE FI_JDJH_ID = @PhaseId

declare
@i int,
@span int,
@count int, --实际的天数
@week int,
@month int,
@day int,
@weekday varchar(50),
@amCourse varchar(100),
@pmCourse varchar(100),
@courseTime varchar(50),
@teacher varchar(50),
@date datetime,
@courseDate datetime

取循环次数啊
set @span = datediff(Day, @startDate, @endDate)
set @i = 0
while (@i <= @span)
begin
set @date = dateadd(day, @i, @startDate)
if (datepart(dw, @date) != 1 and datepart(dw, @date) != 7)
begin
--产生一行数据
set @week = datediff(week, @termDate, @date) + 1
--set @courseDate = convert(varchar(4), datepart(yy, @date)) + '-' + convert(varchar(2), datepart(mm, @date)) + '-' + convert(varchar(2), datepart(dd, @date))
set @courseDate = str(datepart(yy, @date)) + '-' + convert(varchar(2), datepart(mm, @date)) + '-' + convert(varchar(2), datepart(dd, @date))
set @weekday = right(DATENAME(dw, @date), 1)

--上午的课程
set @amCourse = ''
set @courseTime = ''
set @teacher = ''
--是否是有课
SELECT @amCourse = Fs_Kcmc, @courseTime = cast(Fi_Ks as varchar(10)), @teacher = Fs_Name FROM T_Kcszb a, T_Xxkkkc b, T_Teacher_Docu c WHERE a.Fi_Jdjh_Id = @PhaseId AND a.Fd_Skrq = @date AND a.Fi_Sksj = 590001 AND a.Fi_Course_Id = b.Fi_Course_Id and a.Fi_Zg_Id = c.Fi_Zg_Id

--是否有活动
if (@@rowcount != 1)
select @amCourse = Fs_Name_Small from T_Qtjxhdb a, T_Refe b where a.Fi_Hdlx = b.Fi_Key_Code and a.Fi_Jdjh_Id = @PhaseId and a.Fd_Hdrq = @date and a.Fi_Hdsj = 590001
--if (@amCourse = '')
--set @amCourse = '无'

--下午的课程
set @pmCourse = ''
--是否是有课
SELECT @pmCourse = Fs_Kcmc, @courseTime = cast(Fi_Ks as varchar(10)), @teacher = @teacher + ' ' + Fs_Name FROM T_Kcszb a, T_Xxkkkc b, T_Teacher_Docu c WHERE a.Fi_Jdjh_Id = @PhaseId AND a.Fd_Skrq = @date AND a.Fi_Sksj = 590002 AND a.Fi_Course_Id = b.Fi_Course_Id and a.Fi_Zg_Id = c.Fi_Zg_Id

--是否有活动
if (@@rowcount != 1)
select @pmCourse = Fs_Name_Small from T_Qtjxhdb a, T_Refe b where a.Fi_Hdlx = b.Fi_Key_Code and a.Fi_Jdjh_Id = @PhaseId and a.Fd_Hdrq = @date and a.Fi_Hdsj = 590002

--取该行数据
select @week Zc, @courseDate courseDate, @weekday Xq, @amCourse AmCourse, @pmCourse PmCourse, @courseTime CourseTime, @teacher Teacher

set @date = @date + 1
if (@i + 1 <= @span and datepart(dw, @date) != 1 and datepart(dw, @date) != 7)
begin
set @i = @i
end
end
set @i = @i + 1
end
ExploiterSoft 2003-12-10
  • 打赏
  • 举报
回复
为什么一定要用存储过程?
用SQL 不可以吗?存储过程概念上将不返回数据集,你这样的话,也只会是用另外一个DataSet;所以,我觉的用普通的DataSet可能更好一些:如:
with TQuery(DataSet) do
begin
if Active then
Active := False;
SQL.Clear;
SQL.Add('select * form a left join select * from b on ....');
Prepared;
Open;
end;
VeryOldMan 2003-12-10
  • 打赏
  • 举报
回复
这样吧:
create proc proctest(
@aVar int)
as
begin
if @aVar=1
select Field1 AS Coll1, Field2 as Coll2 from TableName
if @aVar=2
select Field3 AS Coll1, Field4 as Coll2 from TableName
.....
end
JCC0128 2003-12-10
  • 打赏
  • 举报
回复
如果只想得到一个数据集的话

语法忘了,你自己去找找,用union

curosr c is (select 1 union select 2 ..union....select n)
JCC0128 2003-12-10
  • 打赏
  • 举报
回复
靠,用多个stroedproc控件不就行了
lykq 2003-12-10
  • 打赏
  • 举报
回复
谢谢 VeryOldMan(老者) 的回答
是我没有把我的意思表达明白,但是我的意思是

create proc proctest
as
while (i < 10)
begin
if i = 1
select 1 col1, 2 col2, 3 col3 from a
if i = 2
select 4 col1, 5 col2, 6 col3 from a
if i = 3
select 7 col1, 8 col2, 9 col3 from a
if i = 4
。。。。。。
end

我取得的结果集是
col1, col2 col3
1, 2, 3, (结果集1)
4, 5, 6 (结果集2)
7, 8, 9 (结果集3)
.......
........

我想在delphi中访问者个整个集合
lykq 2003-12-10
  • 打赏
  • 举报
回复
已自己解决,谢谢各位!
lykq 2003-12-09
  • 打赏
  • 举报
回复
数据集是动态产生的
VeryOldMan 2003-12-09
  • 打赏
  • 举报
回复
creater proc proctest
as
select * form a left join
select * from b on ....
VeryOldMan 2003-12-09
  • 打赏
  • 举报
回复
或者:
create proc proctest(
@aVar varchar (20))
as
begin
select * from @aVar
end
VeryOldMan 2003-12-09
  • 打赏
  • 举报
回复
终于明白你的意思咯:

create proc proctest(
@aVar int)
as
begin
if @aVar=1 then
select * from a
if @aVar=2 then
select * from b
.....
end
lykq 2003-12-09
  • 打赏
  • 举报
回复
create proc proctest
as
while ()
begin
select * from a
下次
select * from b
下次
。。。。。。
end
jingbianfc 2003-12-09
  • 打赏
  • 举报
回复
老者的办法可行啊,只送给QR,当然不用临时表

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧