- PR -

クリスタルレポートの作りこみ

1
投稿者投稿内容
tm
会議室デビュー日: 2006/11/17
投稿数: 3
投稿日時: 2006-12-20 20:22
Crystal Reports for Visual Studio 2005
ASP.NET(VB.NET)で開発中です。

とにかく現状を書いてみます。
色々なところからネタを拾ってここまでこぎつけ、そもそも処理の流れが正しいのかもわからないので
ソース貼りをお許しください。

<CrystalReport.rpt>
レポートへ表示するデータは、Oracleのテーブルにあり
デザインのデータベースエキスパートでODBC接続し、
データベースフィールドに表示された項目を貼り付けています。
また、PARAMという名称のパラメータフィールドを作成しています。

<CrystalReport.aspx>
・CrystalReportViewer1 レポートソース→CrystalReportSource1
・CrystalReportSource1 レポートソース→CrystalReport.rpt
                 EnableCaching = True
                 CacheDuration = 1200

<CrystalReport.aspx.vb>
Protected Sub Page_Load()
  Dim objRd As New ReportDocument
  Dim objConn As New ConnectionInfo
  Dim objDatabase As Database
  Dim crTables As Tables
  Dim objTable As Table
  Dim objTableLogOnInfo As TableLogOnInfo

  Dim paramFields As New ParameterFields()
  Dim paramField As New ParameterField()
  Dim discreteVal As New ParameterDiscreteValue()

  If Not IsPostBack Then
    '//ここでテーブルへのデータ追加処理があります//・・・@
  End If

  objRd = CrystalReportSource1.ReportDocument・・・A
  objRd.Refresh()

  CrystalReportViewer1.ReportSource = objRd

  'ボタン類の表示設定がいくつかあります(略)
  CrystalReportViewer1.HasCrystalLogo = False

  CrystalReportViewer1.ReuseParameterValuesOnRefresh = True

  '接続情報
  With objConn
    .ServerName = "Oracleのログイン情報"
    .DatabaseName = "Oracleのログイン情報"
    .UserID = "Oracleのログイン情報"
    .Password = "Oracleのログイン情報"
  End With

  objDatabase = objRd.Database
  objTables = objDatabase.Tables

  For Each crTable In crTables
    objTableLogOnInfo = objTable.LogOnInfo
    objTableLogOnInfo.ConnectionInfo = objConn
    objTable.ApplyLogOnInfo(objTableLogOnInfo)
  Next

  'パラメータ情報
  paramField.ParameterFieldName = "PARAM"
  discreteVal.Value = 入力されたキー項目・・・B
  paramField.CurrentValues.Add(discreteVal)

  paramFields.Add(paramField)

  CrystalReportViewer1.ParameterFieldInfo = paramFields
  CrystalReportViewer1.RefreshReport()

End Sub

この状態で、@でテーブルに入れ込んだデータ内からBで指定したキーのレコードのみ表示する
という処理には成功しています。

問題は、
1.キー項目を変更して再度実行しても、前回のデータが表示される。(Refresh()が効いてない?)
2.ページ切り替えやプリントボタンを押下した際に、ログインを要求される(キャッシュが消えた?)
という点です。

他に試したことといえば、Aの部分を
objRd.Load("物理パス" & CrystalReport.rpt")に変更し

Protected Sub Page_Unload()
  objRd.Close()
End Sub
を追加したことくらいです。

上記を実行すると、毎回新しいデータが表示されるようにはなったのですが、
5ページあるレポートでページ切り替えの際、2ページ目で「次のページ」を押下しても次のページに進まなくなるといった現象が起きるようになりました。
PDFのプレビューには正常に出力されるので、データそのものが壊れているということはないと思うのですが・・・

レポートの情報が少なく、何が原因なのかさっぱりわかりません。
現象の回避はもちろんですが、処理の流れについても突付いていただけるとありがたいと思っています。
よろしくお願いします。

以下の記事を参考にしました
Crystal Reportにおける画像の更新について
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33162&forum=7

MDBが更新される前にCrystal Reportが出力される。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28638&forum=7
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-12-24 20:53
引用:

tmさんの書き込み (2006-12-20 20:22) より:
Crystal Reports for Visual Studio 2005
ASP.NET(VB.NET)で開発中です。

とにかく現状を書いてみます。
色々なところからネタを拾ってここまでこぎつけ、そもそも処理の流れが正しいのかもわからないのでソース貼りをお許しください。


拾ってきたネタひとつひとつについて、理解できているのでしょうか?
したいと思う処理を、日本語で列挙できるでしょうか?
現状のソースコードが表現している処理を、日本語に変換することが出来ますか?

まず、これらのことをしてみてください。きっと問題も解決できるでしょう。
_________________
1

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