zoukankan      html  css  js  c++  java
  • 水晶报表 Crystal Report 调用存储过程时出错 找不到表 ,解决方法。





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


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




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




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

    G:TEMPFO-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 & " esting.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

  • 相关阅读:
    C# -- 使用线程池 ThreadPool 执行多线程任务
    Bootstrap -- 插件: 按钮状态、折叠样式、轮播样式
    C# -- 等待异步操作执行完成的方式
    Bootstrap -- 插件: 提示工具、弹出框、 警告框消息
    Bootstrap -- 插件: 模态框、滚动监听、标签页
    Bootstrap -- 缩略图、进度条、列表组、面板
    C# -- 使用委托 delegate 执行异步操作
    Bootstrap -- 导航栏样式、分页样式、标签样式、徽章样式
    Bootstrap -- 下拉菜单、输入框组、导航菜单
    Mutex
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7119421.html
Copyright © 2011-2022 走看看