- - PR -
ActiveReportのフェッチを外部から行う方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 以上、よろしくお願い致します。 | ||||
|
投稿日時: 2007-01-10 12:24
VB6でしたらWithEventsを利用して別モジュールやクラスからの
ActiveReportのイベントトラップが可能です。
あとはこの定義したobjRepに対して、実際のレポートオブジェクトのインスタンスを 設定してあげれば対応できます。 Set objRep = (実際のレポートオブジェクト) のような感じですかね。 | ||||
|
投稿日時: 2007-01-10 13:04
ご回答ありがとうございます。
やはり不可能なのかなと、半ば諦めかけていました。 教えて頂いた方法で早速試してみます。 | ||||
|
投稿日時: 2007-01-10 13:09
これをしたところで、何の利点があるというのでしょう。
私にはわかりませんでしたが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-01-11 00:32
今回のFetchイベントだけだと確かに目的が想像しにくいですね。
# WithEventsでActiveReportのイベントトラップすること自体は # 色々と使い道があるんですけどね 想像だけで書くならば、 今回Fetchイベントで行う処理は複数レポートで必要になるので、 できればそのロジックは標準モジュールなどで一カ所にまとめたい というところなのでしょうか・・・? あくまで想像ですので、できれば本人のレスなどがあれば有り難く思います。 それによってはまた違う方法があるかも知れませんしね。 | ||||
|
投稿日時: 2007-01-12 11:16
Afh様
結果報告が遅くなり申し訳ありません。 教えて頂いたイベントトラップで無事解決できました。 また、じゃんぬねっと様の言われていた『利点』につきましては、 Afh様のご推測通り、同様式の帳票が複数あるため共通クラス にコーディングすることによって少しでもコード量を減らせる点 です。 今後ともよろしくお願い致します。 [ メッセージ編集済み 編集者: おとの 編集日時 2007-01-12 11:17 ] | ||||
|
投稿日時: 2007-01-12 12:37
何も、イベント ハンドラごと共通化しなくても良いと思いますけど... それと、コード量を減らすのが良いことだとは限らないです。 親ですらないものに、イベント プロシージャを実装すると、モジュールの原則にも違反します。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-01-13 00:01
個人的には別クラス(モジュールも含め)に実装するというのは、
ある意味でDecoratorパターンに近いものがあるかと思いますので 一概にアウトではないかな、と考えています。 # 当然設計が「それなり」になっていれば、という前提条件はありますが 今回は処理内容としてひっかかりを覚える点はありますが、 発想としてはいいポイントではないでしょうか。 |