- - PR -
Activereports1.5でレコードセットのデータの一部が出力されない
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-23 16:19
Access2000データベースからSQL文にて取得したレコードセットを
Activereports1.5に出力するアプリケーションを作成しています。 Visual Basic 6.0側の実行時コーディングで (Activereportのレポート名).Restart・・・(A) (Activereportのレポート名).show(vbModal)・・・(B) ActiveReportのReportstartイベントのコーディングで (データコントロール名).DatabaseName = (Accessデータベースファイルのパス) (データコントロール名).RecordSource = (ソート付のselectSQL文) と記述しActivereportを表示させています。 (A)と(B)の間に時間の間隔を持たせると問題なくレコードセットの内容が出力されるのですが、 時間の間隔を持たせないで続けて実行すると 一部のレコードセットの一部フィールドの内容がない状態でActivereportに出力されることがあります。 (取得元のAccessテーブルにはデータがあるのにActivereportに出力されません。) コーディングの中に何か不足している点があるのでしょうか? よろしければご教示よろしくお願いします。 | ||||
|
投稿日時: 2007-08-23 16:48
(COM 版は忘却の彼方なのですが) Restart メソッドですか? 周辺処理のコードをそのまま載せて頂けると助かります。 Run メソッドは実行していますか? であればそのタイミングを教えてください。 また Page フィールドにアクセスしている場合は Commit メソッドと DoEvents を必ず実行してください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-08-23 17:12
> じゃんぬねっとさんへ
コーディングをそのまま載せますと <Visual Basic側のコーディング> Private Sub cmdRun_Click() rptGyouseikaikaku_list_ss.Restart rptGyouseikaikaku_list_ss.Show (vbModal) End Sub (cmdRunはコマンドボタンの名前、rptGyouseikaikaku_list_ssはActivereportのレポートの名前です。) <Activereport側のコーディング> Private Sub ActiveReport_ReportStart() GyoseiKanriDsr.DatabaseName = gstrMdb_Path & gcstMDB_Name GyoseiKanriDsr.RecordSource = "SELECT 行政改革管理歳出部課別.*" & _ " From 行政改革管理歳出部課別 " & _ "ORDER BY 行政改革管理歳出部課別.対象年度, " & _ "行政改革管理歳出部課別.事業区分," & _ "行政改革管理歳出部課別.部コード," & _ "行政改革管理歳出部課別.所属コード;" With Printer .TrackDefault = False .PaperSize = vbPRPSA4 'A4サイズに設定 .Orientation = ddOLandscape '用紙を縦に設定 End With End Sub (GyoseiKanriDsrはDAOデータコントロールの名前です。) です。 Runメソッドは記述していません。また、 > Page フィールドにアクセスしている場合は Commit メソッドと DoEvents を必ず実行してください。 とありますが、どの位置に記述するのが適切でしょうか?(現在は記述していません。) | ||||
|
投稿日時: 2007-08-23 17:23
Page への編集はないようなので DoEvents は必要ないと思います。
ところで Run メソッドと Restart メソッドの違いはご存知ですか? Restart メソッドの場合は ReportStart イベントが発生しない仕様になっています。 Restart メソッドは 2 回目以降の実行でメモリ キャッシュをクリアするために存在しています。 これでも解決しないようであれば、Run メソッドの後に DoEvents を実行してください。 ActiveReports はドキュメントを非同期で実行しますが、最終的には Show メソッドのタイミングで同期するハズなので必要ないハズですが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-08-23 19:08
> じゃんぬねっとさんへ
VBサイドのコーディングで Private Sub cmdRun_Click() rptGyouseikaikaku_list_ss.Run rptGyouseikaikaku_list_ss.Pages.Commit rptGyouseikaikaku_list_ss.Show (vbModal) End Sub としてもうまくいきませんが、どのようにDoeventsを挿入すればうまくいきますでしょうか? (Private Sub cmdRun_Click() rptGyouseikaikaku_list_ss.GyoseiKanriDsr.DatabaseName = gstrMdb_Path & gcstMDB_Name rptGyouseikaikaku_list_ss.GyoseiKanriDsr.RecordSource = "SELECT 行政改革管理歳出部課別.*" & _ " From 行政改革管理歳出部課別 " & _ "ORDER BY 行政改革管理歳出部課別.対象年度, " & _ "行政改革管理歳出部課別.事業区分," & _ "行政改革管理歳出部課別.部コード," & _ "行政改革管理歳出部課別.所属コード;" rptGyouseikaikaku_list_ss.Restart rptGyouseikaikaku_list_ss.Show (vbModal) End Sub としてなおかつRestartとShowの間に間隔をあけた時は所望どおりのものが出力されるのですが・・・) | ||||
|
投稿日時: 2007-08-23 19:14
何だかわからなくなってきましたが。 Show メソッドの直前に挿入してもダメでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-08-23 19:19
こんにちは。
Active Reports 2.0の話なので参考程度に。 Restartメソッドをヘルプで調べてみると、サンプルでは以下の順序で記述されてました。 Restart Run Show 言葉的になんか変な感じがしますが、どうでしょうか。 あと、Runメソッドを同期モードで実行するのも手かもしれません。 | ||||
|
投稿日時: 2007-08-24 10:13
> J.J.さん、じゃんぬねっとさん
rptGyouseikaikaku_list_ss.Run (True) DoEvents 'rptGyouseikaikaku_list_ss.Pages.Commit rptGyouseikaikaku_list_ss.Show (vbModal) の状態でやってみましたが、相変わらずレコードセットの内容の一部が出力されません。 (症状としてはある1レコードだけ一部フィールドのデータが出力されない状態です。出力されないフィールドは場合によってまちまちです。) rptGyouseikaikaku_list_ss.Restart rptGyouseikaikaku_list_ss.Run (True) 'rptGyouseikaikaku_list_ss.Pages.Commit rptGyouseikaikaku_list_ss.Show (vbModal) でも同様でした。 さらにどちらのケースでもCommitの部分のコメントをはずして実行すると Activereportに何も内容がない空白の状態で表示されてしまいます。 [ メッセージ編集済み 編集者: 納涼床 編集日時 2007-08-24 10:19 ] |