hur.cn - 华软网

 热门搜索

跪求啦:存储过程返回的列数不确定,数据窗口应该怎么以这个存储过程为数据源建立?

  作者:未知    来源:网络    更新时间:2019/5/10
列位大侠:
托付,帮助了!!!
问题以下:
首先建立尝试表:
Create table  T  (Class varchar(2),CallDate datetime, CallCount int)
insert into T select '1','2005-8-8',40
union all select '1','2005-8-7',6
union all select '2','2005-8-8',77
union all select '3','2005-8-9',33
union all select '3','2005-8-8',9
union all select '3','2005-8-7',21
下面是存储进程的内容
declare @s varchar(8000)
set @s='select CallDate '
select @s=@s+',[CallCount'+Class+']=sum(case when Class='''+Class+''' then CallCount else 0 end)'
from T 
group by Class
set @s=@s+' from T group by CallDate order by CallDate desc '
exec(@s)
请问怎样建立以此存储进程为数据源的数据窗口呢?
------华软网友回答------
动态创建数据窗口.
两个函数可实现
SyntaxFromSQL()

dw_1.create(...)
------华软网友回复------
就是选stored procedure啊……
------华软网友回复------
选stored procedure的话,由于存储进程前往的列数是不固定的,所以在建立数据窗口的时候还要手动的增加各个列名,就像建立外部的数据窗口一样,这样不行啊,由于我也不知道需要几多列啊。
------华软网友回复------
你把sp的语法写到Pb里就能够了。
下面是我以前做的例子。
把语法换成你的就能够了。(dw_1不用设置数据窗口对象)
ls_new_sql = "declare @sql varchar(8000) "
ls_new_sql = ls_new_sql + " set @sql = 'select t_sz_710.firm,apply_date' "
ls_new_sql = ls_new_sql + " select @sql = @sql + ',sum(case rate_name when '''+rate_name+''' then rate else 0 end) ['+rate_name+']' "
ls_new_sql = ls_new_sql + "  from (select  top 99999 rate_name,max(rate) as rate  from t_sz_710  group by rate_name,min_qty order by min_qty) a "
ls_new_sql = ls_new_sql + " select @sql =@sql+', max(cret_day) as cret_day,max(x.emp_name) as cret_pern,max(mody_day) as mody_day,max(y.emp_name) as mody_pern from t_sz_710 ,t_sz_080 x,t_Sz_080 y where t_sz_710.cret_pern *= x.emp_code and t_sz_710.mody_pern *= y.emp_code group by t_sz_710.firm,t_sz_710.apply_date order by t_sz_710.apply_date ,t_sz_710.firm' "
ls_new_sql = ls_new_sql + " exec(@sql) "
ls_new_syntax = SQLCA.SyntaxFromSQL(ls_new_sql, 'Style(Type=grid) column(border=5 ) text(border=6) datawindow(color=80269524) ', ls_error_syntaxfromSQL)
IF Len(ls_error_syntaxfromSQL) <= 0 THEN
  // Generate new DataWindow
  dw_1.Create(ls_new_syntax, ls_error_create)
  
END IF
dw_1.SetTransObject(SQLCA)
dw_1.Retrieve()
------华软网友回复------
动态创建数据窗口:我本来是想用存储进程前往的sql语句@s看成建立动态数据窗口的语句,可是pb接受数据存储的输出参数长度有限,基本接受不全,不知大侠们有没有什么好的方法?
------华软网友回复------
freeliu:
谢谢帮助,已经能够实现了。不过另有一点要讨教一下:我前往的结果里题目列有中文,可是最后显示的结果却是乱码,一堆问号,请问这个问题怎么解决?谢谢大家了:)      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。