いつも参考にさせていただいています。
VisualStudio2005(VB2005)でCrystal Reportsを使って
アプリケーションを作成しています。
どうしてもわからずに、前に進めなくなっています。
どんなことでもかまいません、なにか思いつきますことが
ありましたら、ぜひご教授いただけたらと思います。
[概要]
月、曜日、時間でのグループ出力(サブレポートを使用)
↓こんな感じです。
-----------------------------------------
1月
月曜1時
×××××
×××××
×××××
×××××
×××××
×××××
月曜2時
×××××
×××××
×××××
----改ページ----
2月
月曜1時
×××××
×××××
×××××
×××××
×××××
×××××
-----------------------------------------
※メインレポートで月のグループを制御、
サブレポートで月曜、時間のグルーフを゜制御、
曜日がかわると改ページを行う。
メインレポートとサブレポートにはプログラム内で
それぞれレコードセットを渡しています。
これをビューアーで表示させているのですが、
先頭のグループ(ここでいう1月、月曜)は正しく表示されるのですが、
メインレポートで設定している曜日が変わるとサブレポートの
内容がビューアーでは表示されません。
(月曜〜土曜日まで出力するとき、火曜〜木曜のサブレポートが空白となっている)
実行されているSQLをクリスタルレポートでデータベースの照合で貼り付けて
プレビューすると、正常に出力できます。
ビューア表示時のソースは下記の通りです。
---------------------------------------------------------------------
Dim Creport As CRAXDDRT.Report
Dim m_Application As CRAXDDRT.Application
Dim Conn As ADODB.Connection = Nothing
Dim rs As ADODB.Recordset
Dim rs_sub As ADODB.Recordset = Nothing
Dim intRes As Short
''帳票出力用レコードセットを発行
Call OpenADODB2(Conn)
'' ADOレコードセットオブジェクト生成
rs = New ADODB.Recordset ’メインレポートのレコードセット
With rs
.ActiveConnection = Conn
.Open(strSQL)
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
If .EOF And .BOF Then
intRes = MsgBox("出力対象レコードが存在しません。", MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
Call CloseADODB(Conn)
Exit Sub
End If
End With
'サブレポート
If strSQL_SUB <> "" Then
rs_sub = New ADODB.Recordset ’サブレポートのレコードセット
With rs_sub
.ActiveConnection = Conn
.Open(strSQL_SUB)
If .EOF And .BOF Then
intRes = MsgBox("出力対象レコードが存在しません。", MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
Call CloseADODB(Conn)
Exit Sub
End If
End With
End If
m_Application = New CRAXDDRT.Application ''インスタンスを発行
Creport = m_Application.OpenReport(My.Application.Info.DirectoryPath & "\" & CReportName)
'サブレポート
Dim CreportSections As CRAXDDRT.Sections
Dim CreportSection As CRAXDDRT.Section
Dim CreportObjects As CRAXDDRT.ReportObjects
Dim Csubreport As CRAXDDRT.Report
Dim CsubreportObject As CRAXDDRT.SubreportObject
Dim CreportObject As Object
If strSQL_SUB <> "" Then
CreportSections = Creport.Sections
For Each CreportSection In CreportSections
CreportObjects = CreportSection.ReportObjects
For Each CreportObject In CreportObjects
'UPGRADE_WARNING: オブジェクト CreportObject.Kind の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。
If CreportObject.Kind = CRPEAuto.CRObjectKind.crSubreportObject Then
CsubreportObject = CreportObject
Csubreport = CsubreportObject.OpenSubreport
With Csubreport
.EnableParameterPrompting = False
.Database.Tables(1).SetDataSource(rs_sub)
End With
End If
Next CreportObject
Next CreportSection
End If
With Creport
.EnableParameterPrompting = False ''パラメータプロンプトの出力を無効
Call .PrinterSetup(0)
With .Database
With .Tables(1)
.SetDataSource(rs)
End With
End With
End With
''クリスタルビューアーの設定
With CRViewer1
'ビューアーへ表示するオブジェクトをセット
'UPGRADE_WARNING: オブジェクト CRViewer1.ReportSource の既定プロパティを解決できませんでした。 詳細については、'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"' をクリックしてください。
.ReportSource = Creport
'ビューアーを更新
.ViewReport()
End With
------------------------------------------------------------
どうぞ、よろしくお願いいたします。