2

VS2010を介してロードしているCrystalReportsアプリがあります。CRRuntime13.0.2をマシンにロードしています。デバッグを使用してアプリを実行すると、正常に動作します。(実際には素晴らしいです。)しかし、ビルドされたアプリケーションをインストールすると(非常に同じ開発マシンでも)、TestConnection行がfalseに戻ります。これは、データベースに正しく接続されていないことを示しています。

このコードをそこに入れないと、アプリは次の行でログイン資格情報の入力を求めます:Me.CrystalReportViewer1.ReportSource = reportDocument1

しかし、DB名とサーバー名が正しくなく、グレー表示されており、UserNameとPWに入力したものはすべて機能しません。

私はグーグルを検索し、いくつもの「修正」を試しましたが、何もそれを機能させません。

また、データベースエキスパートを使用してデータソースを「更新」し、デザインモードから「データベースの検証」を実行しましたが、それでも同じことが起こります。

これが私のコードです:

Private Function ConnectReport(sDatabaseFile As String, _serverName As String, ReportDocument1 As ReportDocument)
    ReportDocument1.SetDatabaseLogon("sa", "sqlAdmin2008", _serverName, sDatabaseFile, True)


    For x As Integer = 0 To ReportDocument1.DataSourceConnections.Count - 1
        ReportDocument1.DataSourceConnections(x).SetConnection(_serverName, sDatabaseFile, "sa", "sqlAdmin2008")
    Next

    For Each cTable As Table In ReportDocument1.Database.Tables
        If cTable.Name <> "Command" Then
            SetTableConnectionInfo(cTable, sDatabaseFile, _serverName)
        End If
    Next

    For Each obj As ReportObject In ReportDocument1.ReportDefinition.ReportObjects

        If obj.Kind = ReportObjectKind.SubreportObject Then
            Dim subReport As SubreportObject = CType(obj, SubreportObject)
            Dim subReportDocument As ReportDocument = ReportDocument1.OpenSubreport(subReport.SubreportName)
            ConnectReport(sDatabaseFile, _serverName, subReportDocument)
        End If
    Next

End Function

Private Function SetTableConnectionInfo(cTable As Table, sDatabaseFile As String, _serverName As String)
    Dim logonInfo As TableLogOnInfo = cTable.LogOnInfo
    Dim connInfo As ConnectionInfo = New ConnectionInfo()

    connInfo.DatabaseName = sDatabaseFile
    connInfo.ServerName = _serverName
    connInfo.UserID = "sa"
    connInfo.Password = "sqlAdmin2008"
    'connInfo.Type = ConnectionInfoType.SQL
    logonInfo.ConnectionInfo = connInfo

    cTable.ApplyLogOnInfo(logonInfo)

    If cTable.TestConnectivity = False Then
        Throw New ApplicationException("Cannot connect Crystal Reports to Database.")
    End If

    cTable.Location = sDatabaseFile & "." & "dbo" & "." & cTable.Location


End Function
4

1 に答える 1

0

このような参照としてテーブルを渡す必要があるように思えます。

Private Function SetTableConnectionInfo(ref cTable As Table, sDatabaseFile As String, _serverName As String)
于 2012-11-19T20:35:54.100 に答える