水晶報表 Crystal Report 調用預存程序時出錯 找不到表 ,解決方案。

來源:互聯網
上載者:User

標籤:style   os   檔案   資料   io   for   





用 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.