- PR -

サブレポートの宣言

投稿者投稿内容
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2008-01-16 15:36
 ActiveReportのサブレポートの宣言に
ついてお聞きします。

ReportStartイベントでインスタンス化して下さい
とマニュアルにありましたので

Dim SubReport As Object

ReportStartイベント
SubReport = New RPTSUB

Detail_Formatイベント
SubReport.DataSource = データ

とコーディングしました。
プロシージャ内で共通で使いたい為
Dim SubReport As Objectと宣言しましたが
正しいでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-01-16 15:48
引用:

なびさんの書き込み (2008-01-16 15:36) より:

プロシージャ内で共通で使いたい為
Dim SubReport As Objectと宣言しましたが
正しいでしょうか?


"プロシージャ内で共通で" 使うなら型を明確にすべきですよね。 そうではなくて "クラス内で共通で" 使いたいという意味でしょうか? だとしたらその使用する数だけプライベート フィールドを定義した方が無難です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2008-01-16 18:02

返答ありがとうございます。
今まではDetail_Formatイベント で
Dim SubReport As New RPTSUB とコーディングしていました。
でも下記のグレープシティ社のマニュアルで
ReportStartイベントでインスタンスを作成してください
とありましたので
Dim SubReport As Object

ReportStartイベント
SubReport = New RPTSUB
と修正したのです。
************************************* 
サブレポート:各サブレポートのインスタンスはメモリを消費します。このため、サブレポートを使用したセクションを繰り返すようなレポートを出力する場合は注意してください。たとえば、レポートのDetailセクションが2000回繰り返される場合、Detailセクションに貼り付けたサブレポートのインスタンスは、2000個作成されると考えてください。ネストしたサブレポートはその数のインスタンスを複合します。Detailセクションのように繰り返して出力するセクション内で、サブレポートを使用する必要がある場合、そのセクションのFormatイベント内ではなくレポートのReportStartイベントでインスタンス化してください。それにより、サブレポートは1回だけインスタンス化されメモリの消費を抑えることができます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-01-16 19:04
引用:

なびさんの書き込み (2008-01-16 18:02) より:

サブレポート:各サブレポートのインスタンスはメモリを消費します。このため、サブレポートを使用したセクションを繰り返すようなレポートを出力する場合は注意してください。たとえば、レポートのDetailセクションが2000回繰り返される場合、Detailセクションに貼り付けたサブレポートのインスタンスは、2000個作成されると考えてください。ネストしたサブレポートはその数のインスタンスを複合します。Detailセクションのように繰り返して出力するセクション内で、サブレポートを使用する必要がある場合、そのセクションのFormatイベント内ではなくレポートのReportStartイベントでインスタンス化してください。それにより、サブレポートは1回だけインスタンス化されメモリの消費を抑えることができます。


このあたりは SubReport に限らず、どのオブジェクトにも言えることです。 前の投稿でも少し書きましたが、ReportStart イベントの下準備以外で (他のプロシージャで) 使うのであれば、

コード:

    Private SubReport As RPTSUB


私ならば単純にはこうします。 RPTSUB 型の Private フィールドのメンバとして宣言しておけば別に間違いもなければ問題もないです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2008-01-17 18:50
じゃんぬねっとさん、何度もありがとうございます。

マニュアルに
「レポートのReportStartイベントでインスタンス化してください」
とあった為に
Dim SubReport As Object

ReportStartイベント
SubReport = New RPTSUB

Detail_Formatイベント
SubReport.DataSource = データ

としましたが

Dim SubReport As RPTSUB

Detail_Formatイベント
SubReport.DataSource = データ
でOKですよね・・




じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-01-17 19:04
引用:

なびさんの書き込み (2008-01-17 18:50) より:

マニュアルに
「レポートのReportStartイベントでインスタンス化してください」
とあった為に
Dim SubReport As Object

ReportStartイベント
SubReport = New RPTSUB

Detail_Formatイベント
SubReport.DataSource = データ

としましたが

Dim SubReport As RPTSUB

Detail_Formatイベント
SubReport.DataSource = データ
でOKですよね・・


何が聞きたいのか良くわからなくなってしまいました。 "としましたが" に続く文章が正しい実装だろうということでしょうか? 別にインスタンスの生成は ReportStart イベントで良いですし、さらに言うと DataSource の設定も 1 度だけで良いなら ReportStart イベントだけで良いでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2008-01-18 19:17
すいません。

レポートはクラス内で共通で使いたい為
Dim SubReport As Objectと宣言しました。


DataSource の設定は
Detail_Formatイベントで
内容を変えながら DataSource に渡す為
Detail_Formatイベントで行います。

なにが聞きたかったのかですが
レポートのインスタンスを作成するのに

Dim SubReport As Object

ReportStartイベント
SubReport = New RPTSUB
とするのか

Dim SubReport As RPTSUB
とするのかをお聞きしたかったのです。



じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-01-18 19:21
引用:

なびさんの書き込み (2008-01-18 19:17) より:

なにが聞きたかったのかですが
レポートのインスタンスを作成するのに

Dim SubReport As Object

ReportStartイベント
SubReport = New RPTSUB
とするのか

Dim SubReport As RPTSUB
とするのかをお聞きしたかったのです。


ひとつ前の投稿でも書いたように後者... になるでしょうか。(Dim ではなく Private が適切かと思いますが)
型は明示化されていた方が良いですし、ひとつの変数にまとめる意味はありませんよね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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