- PR -

ActiveReportのフェッチを外部から行う方法

投稿者投稿内容
おとの
会議室デビュー日: 2007/01/09
投稿数: 3
投稿日時: 2007-01-09 20:28
お世話になります。

<環境>
Win2000 Pro SP4
VisualBasic6 SP5
ActiveReport 2.0J

現在、ActiveReportでアンバウンドレポートを作成しています。
付属サンプルでは、どれもActiveReport側のActiveReport_FetchData
イベントでフェッチを行っているのですが、ActiveReport側にコーディング
せず、外部(同一プロジェクト内)のコードから同様の処理を行うことは
可能でしょうか?

ActiveReportにはテキストボックスやラベル等のコントロールを配置する
だけにしておき、外部のコードからFieldの追加及びフィールドとコント
ロールの関連付けまではできたのですが、肝心の明細部分をフェッチできず、
1行しか表示できない状況です。

現在のコードは、フィールドとコントロールの関連付け後にレポートに渡す
データを格納した構造体配列の件数分、外部のコードに実装した下記のメソッド
をコールしています。

Private Sub FetchData(ByRef objRep As Object)
On Error Resume Next
'==============================================================
' 明細行
'==============================================================
With DETAIL_DATA(mlngIndex)
objRep.Fields("FldDtlString01").Value = .strValue(0)
objRep.Fields("FldDtlString02").Value = .strValue(1)
objRep.Fields("FldDtlString03").Value = .strValue(2)
objRep.Fields("FldDtlString04").Value = .strValue(3)
objRep.Fields("FldDtlCurrency01").Value = .curValue(0)
objRep.Fields("FldDtlCurrency02").Value = .curValue(1)
objRep.Fields("FldDtlCurrency03").Value = .curValue(2)
objRep.Fields("FldDtlCurrency04").Value = .curValue(3)
objRep.Fields("FldDtlCurrency05").Value = .curValue(4)
End With
End Sub

以上、よろしくお願い致します。
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-01-10 12:24
VB6でしたらWithEventsを利用して別モジュールやクラスからの
ActiveReportのイベントトラップが可能です。
コード:
Private WithEvents objRep As ActiveReport
'ActiveReportのFetchイベント
Private Sub objRep_FetchData(eof As Boolean)
  'フェッチ時の処理
End Sub


あとはこの定義したobjRepに対して、実際のレポートオブジェクトのインスタンスを
設定してあげれば対応できます。
Set objRep = (実際のレポートオブジェクト)
のような感じですかね。
おとの
会議室デビュー日: 2007/01/09
投稿数: 3
投稿日時: 2007-01-10 13:04
ご回答ありがとうございます。

やはり不可能なのかなと、半ば諦めかけていました。
教えて頂いた方法で早速試してみます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-10 13:09
これをしたところで、何の利点があるというのでしょう。
私にはわかりませんでしたが...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-01-11 00:32
今回のFetchイベントだけだと確かに目的が想像しにくいですね。

# WithEventsでActiveReportのイベントトラップすること自体は
# 色々と使い道があるんですけどね

想像だけで書くならば、

今回Fetchイベントで行う処理は複数レポートで必要になるので、
できればそのロジックは標準モジュールなどで一カ所にまとめたい
というところなのでしょうか・・・?

あくまで想像ですので、できれば本人のレスなどがあれば有り難く思います。
それによってはまた違う方法があるかも知れませんしね。
おとの
会議室デビュー日: 2007/01/09
投稿数: 3
投稿日時: 2007-01-12 11:16
Afh様
結果報告が遅くなり申し訳ありません。
教えて頂いたイベントトラップで無事解決できました。

また、じゃんぬねっと様の言われていた『利点』につきましては、
Afh様のご推測通り、同様式の帳票が複数あるため共通クラス
にコーディングすることによって少しでもコード量を減らせる点
です。

今後ともよろしくお願い致します。

[ メッセージ編集済み 編集者: おとの 編集日時 2007-01-12 11:17 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-12 12:37
引用:

おとのさんの書き込み (2007-01-12 11:16) より:

また、じゃんぬねっと様の言われていた『利点』につきましては、Afh様のご推測通り、同様式の帳票が複数あるため共通クラスにコーディングすることによって少しでもコード量を減らせる点です。


何も、イベント ハンドラごと共通化しなくても良いと思いますけど...
それと、コード量を減らすのが良いことだとは限らないです。
親ですらないものに、イベント プロシージャを実装すると、モジュールの原則にも違反します。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2007-01-13 00:01
個人的には別クラス(モジュールも含め)に実装するというのは、
ある意味でDecoratorパターンに近いものがあるかと思いますので
一概にアウトではないかな、と考えています。

# 当然設計が「それなり」になっていれば、という前提条件はありますが

今回は処理内容としてひっかかりを覚える点はありますが、
発想としてはいいポイントではないでしょうか。

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