- PR -

ActiveReportsの変数宣言について

1
投稿者投稿内容
KK
会議室デビュー日: 2006/06/20
投稿数: 2
投稿日時: 2006-06-20 22:29
開発環境は、VB.NET2003でActiveReportsを使用しています。

帳票がTESTAとTESTBの2つ存在します。その帳票をそれぞれ出力するには、以下のようにそれぞれ記述すると思います。

Dim rptA As New TESTA
Viewer1.Document = rptA.Document
rptA.Run(True)

Dim rptB As New TESTB
Viewer1.Document = rptB.Document
rptB.Run(True)

これを、rptMain という変数を作成し、IF文によって出力帳票を変更するように、以下のように変更してみました。

Dim rptMain As New Object
Dim rptA As New TESTA
Dim rptB As New TESTB

If i = 1 Then
rptMain = rptA
Else
rptMain = rptB
End If

Viewer1.Document = rptMain.Document
rptMain.Run(True)

そうすると、ActiveReportsをプレビューされるまでの時間が遅くなってしまいました。
どうして、Objectにしたかというと、それしか思いつかなかったためです。

上記のようなことは、他に可能なのでしょうか?コーディングを教えてください。

よろしくお願いいたします。


[ メッセージ編集済み 編集者: KK 編集日時 2006-06-20 22:31 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-21 07:41
引用:

KKさんの書き込み (2006-06-20 22:29) より:

Viewer1.Document = rptMain.Document
rptMain.Run(True)

そうすると、ActiveReportsをプレビューされるまでの時間が遅くなってしまいました。


遅延バインドされるからですね。
Option Strict を On に設定されることをお勧めします。

...と、言いたいところなのですが、(;^-^)

引用:

Dim rptMain As New Object
Dim rptA As New TESTA
Dim rptB As New TESTB


使わないかもしれないモノまでインスタンス化しているから、当初のコードに比べて遅延しているのだと思います。

少なくとも帳票は 1 つしか使用しないハズです。
であるのに、2 つともインスタンス化しています。
帳票のインスタンス化は時間を要します。

これでは、ただの無駄ですよね。
インスタンス化とは、どういうことかを考えてみる必要があります。

引用:

どうして、Objectにしたかというと、それしか思いつかなかったためです。
上記のようなことは、他に可能なのでしょうか?

引用:

If i = 1 Then
  rptMain = rptA
Else
  rptMain = rptB
End If


ではなく、素直にその型ごとで分岐させるべきだと思います。
CLR プログラミングの主役は "型" ですから、これを疎かになると保守性も悪くなります。
(System.Object は使わない)

コード:

    Select Case iKind
        Case 1
            Dim rptA As New TestA()
            Viewer1.Document = rptA.Document 
            rptA.Run(True)
        Case 2
            Dim rptB As New TestA()
            Viewer1.Document = rptB.Document 
            rptB.Run(True)
    End Select


と、このように使う直前で (使うと決まってから) 必要なものだけインスタンス化すべきでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KK
会議室デビュー日: 2006/06/20
投稿数: 2
投稿日時: 2006-06-21 19:53
じゃんぬねっと様

使う直前で、必要なものだけインスタンス化するようにしました。

わかり易い説明、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)