Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 无效的报告文件路径错误-Crystal Reports w/存储过程_Sql Server_Vb.net_Stored Procedures_Crystal Reports - Fatal编程技术网

Sql server 无效的报告文件路径错误-Crystal Reports w/存储过程

Sql server 无效的报告文件路径错误-Crystal Reports w/存储过程,sql-server,vb.net,stored-procedures,crystal-reports,Sql Server,Vb.net,Stored Procedures,Crystal Reports,我有一个VB.Net应用程序,它使用来自不同数据源的数据集创建一个crystal报表,这些数据源进入不同的子报表。在我尝试使用存储过程作为子报表的数据源之前,报表显示良好,在这种情况下,我会收到错误“无效的报表文件路径” 此存储过程需要将一个数字连接到列名,以避免重复代码 我已经在数据集被填充的地方设置了断点,检查了数据集内容,发现所有需要的数据都在数据集中,但是当我逐步进入报表打开的位置时,我会得到错误。当我在SQL Server中执行存储过程时,数据将毫无问题地返回。如果删除使用存储过程的子

我有一个VB.Net应用程序,它使用来自不同数据源的数据集创建一个crystal报表,这些数据源进入不同的子报表。在我尝试使用存储过程作为子报表的数据源之前,报表显示良好,在这种情况下,我会收到错误“无效的报表文件路径”

此存储过程需要将一个数字连接到列名,以避免重复代码

我已经在数据集被填充的地方设置了断点,检查了数据集内容,发现所有需要的数据都在数据集中,但是当我逐步进入报表打开的位置时,我会得到错误。当我在SQL Server中执行存储过程时,数据将毫无问题地返回。如果删除使用存储过程的子报表,报表将生成良好的结果。想知道是否需要对存储过程进行不同的编码。。。?还是别的什么

这是存储过程的代码

ALTER PROCEDURE [dbo].[T_STORED_PROC]
(

@qmonth varchar(20),
@qyear varchar (4),
@qid varchar (10)
)
AS


DECLARE @i varchar(10)
DECLARE @sql varchar(1000)

SET @i = 1

WHILE (@i <=28)
BEGIN
 SET @sql ='SELECT t1.ID, t2.CatId, t2.CatName, t1.M_'+ @i +'_DATE As Mid_Date 
FROM Table1 As t1, Table2 As t2 WHERE t2.CatId = RTRIM(LEFT(t1.M_'+ @i +', 2)) 
AND t1.ID = '''+ @qid +''' AND t1.Yr = '+ @qyear +' AND t1.M_Month = '''+ @qmonth +''' 
ORDER BY t1.ID'

    EXEC (@sql)

END

谢谢你的帮助

我找到了解决问题的办法。Crystal Reports似乎没有识别存储在SQL变量中的数据库字段。我更改了存储过程,以便查询结果填充我创建的临时表,然后从中获取数据库字段。以下是工作存储过程:

ALTER PROCEDURE [dbo].[T_STORED_PROC]
(

@qmonth varchar(20),
@qyear varchar (4),
@qid varchar (10)
)
AS

--Temp table
DECLARE @tmp table
(
ID nvarchar(10),
CategoryId int,
CategoryName nvarchar(50),
CatDate datetime
)

DECLARE @i varchar(10)
DECLARE @sql varchar(1000)

SET @i = 1

WHILE (@i <=28)
BEGIN
 SET @sql ='SELECT t1.ID, t2.CatId, t2.CatName, t1.M_'+ @i +'_DATE As Mid_Date 
FROM Table1 As t1, Table2 As t2 WHERE t2.CatId = RTRIM(LEFT(t1.M_'+ @i +', 2)) 
AND t1.ID = '''+ @qid +''' AND t1.Yr = '+ @qyear +' AND t1.M_Month = '''+ @qmonth +''' 
ORDER BY t1.ID'

--INSERT results into temp table
INSERT INTO @tmp

    EXEC (@sql)

END

--SELECT from temp table
SELECT ID As ID,
CategoryId AS CategoryId,
CategoryName AS CategoryName,
CatDate As CatDate
FROM @tmp
ALTER过程[dbo].[T\u存储的\u过程]
(
@第四个月瓦查尔(20),
@qyear varchar(4),
@奇德·瓦尔查尔(10)
)
像
--临时表
声明@tmp表
(
女税务师(10),
类别ID int,
类别名称nvarchar(50),
CatDate日期时间
)
声明@i varchar(10)
声明@sql varchar(1000)
设置@i=1
而(@i
ALTER PROCEDURE [dbo].[T_STORED_PROC]
(

@qmonth varchar(20),
@qyear varchar (4),
@qid varchar (10)
)
AS

--Temp table
DECLARE @tmp table
(
ID nvarchar(10),
CategoryId int,
CategoryName nvarchar(50),
CatDate datetime
)

DECLARE @i varchar(10)
DECLARE @sql varchar(1000)

SET @i = 1

WHILE (@i <=28)
BEGIN
 SET @sql ='SELECT t1.ID, t2.CatId, t2.CatName, t1.M_'+ @i +'_DATE As Mid_Date 
FROM Table1 As t1, Table2 As t2 WHERE t2.CatId = RTRIM(LEFT(t1.M_'+ @i +', 2)) 
AND t1.ID = '''+ @qid +''' AND t1.Yr = '+ @qyear +' AND t1.M_Month = '''+ @qmonth +''' 
ORDER BY t1.ID'

--INSERT results into temp table
INSERT INTO @tmp

    EXEC (@sql)

END

--SELECT from temp table
SELECT ID As ID,
CategoryId AS CategoryId,
CategoryName AS CategoryName,
CatDate As CatDate
FROM @tmp