【问题标题】:Invalid Report File Path error - Crystal Reports w/ stored procedure无效的报告文件路径错误 - 带有存储过程的 Crystal Reports
【发布时间】:2015-10-28 13:34:21
【问题描述】:

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

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

我在填充数据集的位置设置了断点,检查了数据集的内容,发现所有需要的数据都在数据集中,但是当我单步执行到打开报告的位置时会出现错误。当我在 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

相关的VB在这里

Dim dsQRpt = New Data.DataSet
 Dim dsMS = New Data.DataSet
 Dim QPrpt = New ReportDocument

 Dim cmd As OleDbCommand = New OleDbCommand()
        cmd.Connection = MSCON
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "dbo.T_STORED_PROC"
        cmd.Parameters.Add("@qmonth", OleDbType.VarChar, 20, ParameterDirection.Output).Value = cboMonth.SelectedValue
        cmd.Parameters.Add("@qyear", OleDbType.VarChar, 4, ParameterDirection.Output).Value = cboYear.SelectedValue
        cmd.Parameters.Add("@qid", OleDbType.VarChar, 10, ParameterDirection.Output).Value = txtPTSID.Text

        Dim DAms As New OleDbDataAdapter(cmd.CommandText, MSCON)

        DAms.SelectCommand = cmd

        DAms.Fill(dsQRpt)

        QPrpt.Load(Server.MapPath("crReport.rpt"))
        QPrpt.SetDataSource(dsQRpt)
        crQtrProgress.ReportSource = QPrpt

感谢您的帮助

【问题讨论】:

    标签: sql-server vb.net stored-procedures crystal-reports


    【解决方案1】:

    我找到了解决问题的方法。看起来 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-28
      • 2020-06-26
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2020-03-18
      相关资源
      最近更新 更多