水晶报表 Crystal Report 调用存储过程时出错 找不到表 ,解决方法。





用 CrystalReportViewer1 控件在asp.net的网页上显示报表,假设做报表时调用数据表数据的方式调用是能够成功的。但报表是用存储过程获取数据方式会出现下面错误:


找不到表'RptOpenCheck;1' 。 文件 G:\TEMP\FO-OpenCheck {6D191F06-DECF-4A25-88FC-8553E3D435AA}.rpt 内出错: 找不到表。
Error: 未将对象引用设置到对象的实例。




The table 'RptOpenCheck;1' could not be found. Error in File G:\TEMP\FO-OpenCheck {6D191F06-DECF-4A25-88FC-8553E3D435AA}.rpt: The table could not be found.




未能打开该连接。 未能打开该连接。

G:\TEMP\FO-OpenCheck {4E60249E-FC16-4F3D-A610-138FC3297171}.rpt


VS2005 环境,Crsytal Reports 11.5


代码下面:


    Dim crtableLogoninfos As New TableLogOnInfos
    Dim crtableLogoninfo As New TableLogOnInfo
    Dim crConnectionInfo As New ConnectionInfo
    Dim crParameterFields As ParameterFields
    Dim crParameterField As ParameterField
    Dim crParameterValues As ParameterValues
    Dim crParameterDefValues As ParameterValues
    Dim crParameterValue As ParameterValue
    Dim crParameterDiscreteValue As ParameterDiscreteValue


    Dim CrTables As Tables
    Dim CrTable As Table


    Dim ReportName As String
    Dim PrintTo As String       ' P Printer V Window
    Dim ReportPath As String
    Dim UserName As String
    Dim Password As String
    Dim ServerName As String
    Dim DatabaseName As String
    Dim crReportDocument As New ReportDocument




Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load, Me.Load


    Dim strParam As String = Request("p")


'获取用户请求參数
    If Right(strParam, 1) = "~" Then
        strParam = Mid(strParam, 1, Len(strParam) - 1)
    End If


'參数转换为数组
    s = Split(strParam, "~")


    'use odbc connection database 
    With crConnectionInfo
        .AllowCustomConnection = True
        .ServerName = ”ODBCName"
        '.DatabaseName = "TempDB"
        .UserID = "sa"
        .Password = "Microwin"
    End With


    ''use SQL connection database 
    'With crConnectionInfo
    '    .AllowCustomConnection = True
    '    .ServerName = "(local)"
    '    .DatabaseName = "TempDB"
    '    .UserID = "sa"
    '    .Password = "Microwin"
    'End With
    
    '指定报表路径
    ReportPath = Server.MapPath(Request.ApplicationPath)
    ReportNamePath = ReportPath & "\testing.rpt"


    'check report file exists and Load Report
    If System.IO.File.Exists(ReportNamePath) Then
        crReportDocument.Load(ReportNamePath)
    End If
    
    '设置报表文档给报表控件
    Me.CrystalReportViewer1.ReportSource = crReportDocument

'设置连接数据库信息给报表文档
    CrTables = crReportDocument.Database.Tables
    For Each CrTable In CrTables


        crtableLogoninfo = CrTable.LogOnInfo
        crtableLogoninfo.ConnectionInfo = crConnectionInfo
        CrTable.ApplyLogOnInfo(crtableLogoninfo)


'就是这句没有加,所以会出现以上错误信息。仅仅有报表是调用存储过程取数据时才会出现错误。花了我几天时间,最终攻克了。
CrTable.Location = CrTable.Name
    Next


'设置控件显示的属性
    With CrystalReportViewer1


        .AutoDataBind = True
        .ReuseParameterValuesOnRefresh = True
        .EnableDatabaseLogonPrompt = False
        .EnableParameterPrompt = False


        CrystalReportViewer1.DisplayGroupTree = False
        CrystalReportViewer1.DisplayPage = True
        CrystalReportViewer1.DisplayToolbar = True
        CrystalReportViewer1.ReportSource = crReportDocument


    End With


    If Not IsPostBack Then


'取用户请求的參数赋值给报表。假设报表须要參数的话。从第三个元素開始为报表參数值。


        crParameterFields = Nothing
        crParameterFields = CrystalReportViewer1.ParameterFieldInfo


        Dim j As Integer = UBound(s, 1)

        For i = 0 To crParameterFields.Count - 1
            crParameterField = crParameterFields.Item(i)


            crParameterValues = crParameterField.CurrentValues


            crParameterDefValues = Nothing
            crParameterDefValues = New ParameterValues
            crParameterDefValues = crParameterField.DefaultValues


            crParameterDiscreteValue = Nothing
            crParameterDiscreteValue = New ParameterDiscreteValue


            If i > (j - 2) Then


                Select Case crParameterField.ParameterValueKind
                    Case ParameterValueKind.BooleanParameter
                        crParameterDiscreteValue.Value = False
                    Case ParameterValueKind.CurrencyParameter
                        crParameterDiscreteValue.Value = Nothing
                    Case ParameterValueKind.DateParameter
                        crParameterDiscreteValue.Value = System.DateTime.Now
                    Case ParameterValueKind.DateTimeParameter
                        crParameterDiscreteValue.Value = System.DateTime.Now
                    Case ParameterValueKind.NumberParameter
                        crParameterDiscreteValue.Value = Nothing
                    Case ParameterValueKind.StringParameter
                        crParameterDiscreteValue.Value = " "
                    Case ParameterValueKind.TimeParameter
                        crParameterDiscreteValue.Value = System.DateTime.Now
                End Select


                crParameterValues.Add(crParameterDiscreteValue)


            Else


                Select Case crParameterField.ParameterValueKind
                    Case ParameterValueKind.BooleanParameter
                        crParameterDiscreteValue.Value = IIf(s(i + 2) = "0", False, True)
                    Case ParameterValueKind.CurrencyParameter
                        crParameterDiscreteValue.Value = IIf(Trim(s(i + 2) & "") = "", Nothing, s(i + 2))
                    Case ParameterValueKind.DateParameter
                        crParameterDiscreteValue.Value = IIf(Trim(s(i + 2) & "") = "", Nothing, s(i + 2))
                    Case ParameterValueKind.DateTimeParameter
                        crParameterDiscreteValue.Value = IIf(Trim(s(i + 2) & "") = "", Nothing, s(i + 2))
                    Case ParameterValueKind.NumberParameter
                        crParameterDiscreteValue.Value = IIf(Trim(s(i + 2) & "") = "", Nothing, s(i + 2))
                    Case ParameterValueKind.StringParameter
                        crParameterDiscreteValue.Value = IIf(Trim(s(i + 2) & "") = "", " ", s(i + 2))
                    Case ParameterValueKind.TimeParameter
                        crParameterDiscreteValue.Value = IIf(Trim(s(i + 2) & "") = "", Nothing, s(i + 2))
                End Select


                crParameterValues.Add(crParameterDiscreteValue)
            End If


        Next




    End If
    
End Sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值