- PR -

Activereports1.5でレコードセットのデータの一部が出力されない

投稿者投稿内容
納涼床
ベテラン
会議室デビュー日: 2006/06/28
投稿数: 53
お住まい・勤務地: 京都市下京区
投稿日時: 2007-08-24 10:38
なお、

rptGyouseikaikaku_list_ss.Run (True)
rptGyouseikaikaku_list_ss.Show (vbModal)

としてRunとShowの間に時間間隔を置いた場合は正常にレポートが出力されます。
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-08-24 12:56
引用:

納涼床さんの書き込み (2007-08-24 10:38) より:
rptGyouseikaikaku_list_ss.Run (True)



あれ?同期実行はパラメタがFalseじゃないんですか?
いや、バージョン違いでパラメタの意味合いが変わるとは思えないんで。

それとも敢えて非同期実行?
納涼床
ベテラン
会議室デビュー日: 2006/06/28
投稿数: 53
お住まい・勤務地: 京都市下京区
投稿日時: 2007-08-24 17:39
> J.J.さん

rptGyouseikaikaku_list_ss.Run (True)
rptGyouseikaikaku_list_ss.Show (vbModal)

について、RunとShowの間に時間間隔を置かなかった場合は「〜ss.Run(True)」「〜ss.Run(False)」「〜ss.Run(カッコを省略)」のいずれの場合でもレコードセットの内容の一部が出力されませんでした。
一方、間隔を置いた場合では「〜ss.Run(True)」の場合のみ正常にレポートが出力されましたが、「〜ss.Run(False)」「〜ss.Run(カッコを省略)」の場合は内容の一部が出力されませんでした。
ちなみに(申し遅れましたが)VBのフォームにActiveReport1.5のビューアは組み込んでいません。
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-08-25 00:10
そうですか。

引用:

納涼床さんの書き込み (2007-08-24 10:38) より:
RunとShowの間に時間間隔を置いた場合は正常にレポートが出力



とあったので、「ひょっとして同期実行でいけるんじゃ?」と思ったもので。
2.0Jで同期実行・非同期実行共に試してみましたが、現象は再現できませんでした。

===ここからは完全に予想===
考えられる対応策は、
・RunとShowの間にDoEventsを入れる
・RunとShowの間でSleepなどで時間間隔をあける
ぐらいでしょうか。根本的な解決にはならないと思いますけども。

あと、GrapeCity社のFAQに関係しそうなものがありました。
参考程度に。
http://www.grapecity.com/Japan/Support/Search/FaqContent.asp?id=8583

===ここまで===

お役に立てず、申し訳ないです。
納涼床
ベテラン
会議室デビュー日: 2006/06/28
投稿数: 53
お住まい・勤務地: 京都市下京区
投稿日時: 2007-08-27 10:54
> J.J.さん

Run(Restart)とShowの間にDoEventsを入れてみましたが、結果は同じでした。
(どうもRunの後にすぐShowが実行されてレコードセットの一部が反映されない状態で
Activereportが表示されるようです。)
「時間間隔を置いた状態」というのはSleepを実行しているのと同じ意味です。

私が考えているのはできればプリンタへの印刷作業を実行しない状態で
Activereportの作成が終わるタイミングをキャッチしてそのタイミングで
Activereportのプレビューを表示させたいのですが・・・。
(Activereportの作成にかかる時間はデータの多少によって違うと思うので)
よい方法がありましたらご教示願います。
なお、現在VBのフォームにTimerやActiveReportビューアは組み込んでいません。
nakaP
大ベテラン
会議室デビュー日: 2005/09/27
投稿数: 138
お住まい・勤務地: 高知
投稿日時: 2007-08-27 11:31
#再度言いますが、こちらは2.0Jなので参考程度に。

レポート処理が完了すればReportEndイベントが発生しますので、そこで完了フラグを立てるなどをすれば可能だと思います。
納涼床
ベテラン
会議室デビュー日: 2006/06/28
投稿数: 53
お住まい・勤務地: 京都市下京区
投稿日時: 2007-08-27 11:42
いろいろ試していますが、J.J.さんのおっしゃるとおり

rptGyouseikaikaku_list_ss.Run (True)
DoEvents
Sleep (ミリ秒数)
rptGyouseikaikaku_list_ss.Show (vbModal)

と適切にDoeventsとSleepを挟んである程度の
インターバルを置いてあげるのがベストなのかも知れませんね。
納涼床
ベテラン
会議室デビュー日: 2006/06/28
投稿数: 53
お住まい・勤務地: 京都市下京区
投稿日時: 2007-08-28 11:14
引用:

J.J.さんの書き込み (2007-08-27 11:31) より:
#再度言いますが、こちらは2.0Jなので参考程度に。

レポート処理が完了すればReportEndイベントが発生しますので、そこで完了フラグを立てるなどをすれば可能だと思います。




この方法も試してみましたが、フラグを立てた時点でActiveReportを表示してしまうと
レコードセットの一部が反映されない状態は変わりませんでした。
一方、

DoEvents
Sleep (dwMillisecond)

の方法だとおよそdwMillisecond=300(300ミリ秒)以上で正常に表示されました。
(dwMillisecond=200以下では正常に表示されないようです。)

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