3

数十個のレガシー レポートがあり、その多くは SQL Server ストアド プロシージャをデータ ソースとして使用しています。VB.NET 2010CR for Visual Studio 2010 version 13.0.2 で構築されたアプリケーションでそれらを使用しようとしています。

ストアド プロシージャに基づいてレポートを実行すると、次のようなエラー メッセージが表示されます。

テーブル「REPORT_SCHEDULEB」が見つかりませんでした

レポートのテーブル定義は次のようになります。

LogOnInfo.ConnectionInfo for REPORT_SCHEDULEB:
Name: "REPORT_SCHEDULEB", Location: "Proc(REPORT_SCHEDULEB;1)"
AllowCustomConnection: False, DBName: myDb, IntegratedSecurity: False
ServerName: myComputer, User: myName, Password: myPassword, Attributes:
    Database DLL: crdb_ado.dll
    QE_DatabaseName: myDb
    QE_DatabaseType: OLE DB (ADO)
        Auto Translate: -1
        Connect Timeout: 0
        Data Source: myComputer
        General Timeout: 0
        Initial Catalog: myDb
        Integrated Security: False
        Locale Identifier: 1033
        OLE DB Services: -5
        Provider: SQLOLEDB
        Tag with column collation when possible: 0
        Use DSN Default Properties: False
        Use Encryption for Data: 0
        Owner: dbo
    QE_ServerDescription: myComputer
    QE_SQLDB: True
    SSO Enabled: False
    Owner: dbo

Locationフィールドの定義方法に問題があると思いますが、

  1. レポート エディターでオーバーライドされた修飾テーブル名を変更しようとすると、変更が受け入れられず、
  2. 何十ものレポートを手作業で編集するよりも、プログラムによる解決策を見つけたいと思っています。

そのため、コードで table.Location 値を設定しようとしましたが、COM 例外がスローされました。あるレベルでは読み取り専用だと思います。

また、ある種のQualifiedNameプロパティを設定する可能性も考えましたが、それを行う方法が見つかりませんでした。

何か案は?

ティア

4

1 に答える 1

0

ストアド プロシージャから作成されたデータ テーブルを使用して実行時にレポート データソースを設定することにより、VB で解決策を達成しました。このように、すべての接続の詳細は、各レポートに対して保存するのではなく、アプリケーション内に 1 回保存するだけで済みます。

(だいたい)

Dim SourceDatabase as datatable = GetDatatableFromSP(SPName)
Dim DocumentToShow as New ReportDocument

DocumentToShow.Load(DocumentPath)
DocumentToShow.SetDataSource(SourceDatabase)

ReportViewer.ViewerCore.ReportSource = DocumentToShow 
于 2014-08-08T20:44:12.193 に答える