うなまな Blog

VB覚え書き

AILight Banner
AILight Blog

プロフィール

うなまな Blog

目次

Blog 利用状況

記事分類

過去の記事

タグ

Crystal Reportで接続先を変えて、ストアドのパラメータをセット

はまりました。。。orz

デザイン時の接続情報のままでパラメータをセットするのには、問題なかった。

Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
 
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
    Dim crReportDocument As New ReportDocument
 
    ''レポートロード
    crReportDocument.Load("c:\\HogeReport.rpt") 
    ''パラメータセット
    Call Me.SetParameter(crReportDocument.DataDefinition.ParameterFields, "@フィールド名""セットする値")
    ''レポート表示
    Me.CrystalReportViewer1.ReportSource = crReportDocument
End Sub
 
Public Sub SetParameter(ByVal paramDef As ParameterFieldDefinitions, ByVal paramName As StringByVal paramValue As Object)
 
    Dim crParameterFieldDefinition As ParameterFieldDefinition = paramDef.Item(paramName)
    Dim crParameterValues As ParameterValues = crParameterFieldDefinition.CurrentValues
    Dim crParameterDiscreteValue As New ParameterDiscreteValue
 
    crParameterDiscreteValue.Value = paramValue
    crParameterValues.Add(crParameterDiscreteValue)
    crParameterFieldDefinition.ApplyCurrentValues(crParameterValues)
 
End Sub

これが、実行時に接続情報をセットした場合、
「プロシージャまたは関数'XXXXXXXXX'にはパラメータ'@フィールド名'が必要ですが、指定されませんでした。」
とエラーになる。
Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
 
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
    Dim crReportDocument As New ReportDocument
 
    ''レポートロード
    crReportDocument.Load("c:\\HogeReport.rpt") 
    ''接続情報のセット
    Call Me.SetReportLogOnInfo(crReportDocument)
    ''パラメータセット
    Call Me.SetParameter(crReportDocument.DataDefinition.ParameterFields, "@フィールド名""セットする値")
    ''レポート表示
    Me.CrystalReportViewer1.ReportSource = crReportDocument
End Sub
 
Private Sub SetReportLogOnInfo(ByRef rpt As ReportClass)
    Dim crTableLogOnInfo As New TableLogOnInfo
    Dim crConnectionInfo As New ConnectionInfo
 
    ' 接続パラメータを設定
    crConnectionInfo.DatabaseName = "DatabaseName"
    crConnectionInfo.ServerName = "ServerName"
    crConnectionInfo.UserID = "UserID"
    crConnectionInfo.Password = "Password"
    crTableLogOnInfo.ConnectionInfo = crConnectionInfo
 
    For Each tb As Table In rpt.Database.Tables
        crTableLogOnInfo = tb.LogOnInfo
        crTableLogOnInfo.ConnectionInfo = crConnectionInfo
        tb.ApplyLogOnInfo(crTableLogOnInfo)
        ''------------------------------------------------
        tb.Location = "DatabaseName.dbo." & tb.Location.Substring(tb.Location.LastIndexOf(".") + 1)
        ''------------------------------------------------
    Next
End Sub

めちゃくちゃハマリましたね。
で、結局、1行追加するだけで解決できました。

Private Sub SetReportLogOnInfo(ByRef rpt As ReportClass)
    Dim crTableLogOnInfo As New TableLogOnInfo
    Dim crConnectionInfo As New ConnectionInfo
 
    ' 接続パラメータを設定
    crConnectionInfo.DatabaseName = "DatabaseName"
    crConnectionInfo.ServerName = "ServerName"
    crConnectionInfo.UserID = "UserID"
    crConnectionInfo.Password = "Password"
    crTableLogOnInfo.ConnectionInfo = crConnectionInfo
 
    For Each tb As Table In rpt.Database.Tables
        crTableLogOnInfo = tb.LogOnInfo
        crTableLogOnInfo.ConnectionInfo = crConnectionInfo
        tb.ApplyLogOnInfo(crTableLogOnInfo)
        ''------------------------------------------------
        tb.Location = "DatabaseName.dbo." & tb.Location.Substring(tb.Location.LastIndexOf(".") + 1)
        ''------------------------------------------------
    Next
End Sub

めでたしめでたし。

投稿日時 : 2006年6月6日 11:34


コメントを追加

タイトル
名前
URL
コメント