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