リンク: VB テクニック編14 – 動的コントロール追加、クリスタルレポート印刷 – SAK Streets.

■クリスタルレポート印刷

  ・クリスタルレポート(Crystal Reports) で印刷する場合、データコントロー
    ルとのオートメーションを使用するか、クリスタルレポートでレコードセッ
    トを作成するか選択できる。

  ・定義帳票パターンを使用するには、次の ReportSource = 0 ‘crptReport に
    設定して、クリスタルレポートでレコードセットを作成する。
    但し、ODBC アクセスなどのリモートデータベースでないと、
    Report1.SQLQuery は指定できない。
    (MDB を普通に参照して、クリスタルレポートでレコードセットを作成する
    場合の例は、中程に別途サンプルコードがあります。)
    MDB でも、ODBC 経由でアクセスすれば、Oracle や SQL-Server と同じに
    次のコードが使用できる。

  dim dsn as string
  dim rti as string
  dim rpt as string
  dim ppre as string
  dim cpis as string
  dim dsav as string
  dim sql as string

  dsn = “dsn=SAK3_ADO;uid=SAK;pwd=SAK”
  rti = “レポートタイトル”
  rpt = “l_juchu.rpt”
  ppre = 0 ‘プレビュー
  cpis = 1
  dsav = 1 ‘データ保存
  sql = “select * from 受注m where 品番 = ‘a001′ order by 受注番号”

‘** 印刷
  Report1.ReportFileName = rpt
  Report1.ReportSource = 0 ‘crptReport
  Report1.Connect = dsn
  Report1.Destination = ppre
  Report1.PrinterCopies = cpis
  Report1.DiscardSavedData = dsav
  Report1.SQLQuery = sql
  Report1.WindowTitle = rti
  On Error Resume Next
  Report1.Action = 1
  If err <> 0 Then
    msgbox “作表でエラーが発生しました。”
  End If
  On Error GoTo 0

  ・MDB を普通に参照して、クリスタルレポートでレコードセットを作成する場
    合は、ReportSource = 0 ‘crptReport として、次のようにコードする。

  dim rti as string
  dim rpt as string
  dim ppre as string
  dim cpis as string
  dim dsav as string
  dim where as string

  rti = “レポートタイトル”
  rpt = “l_juchu.rpt”
  ppre = 0 ‘プレビュー
  cpis = 1
  dsav = 1 ‘データ保存
  where = “{受注M.品番} = ‘a001′ and {受注M.得意先CD} = ‘2000′”

‘** 印刷
  Report1.ReportFileName = rpt
  Report1.ReportSource = 0 ‘crptReport
  Report1.Destination = ppre
  Report1.PrinterCopies = cpis
  Report1.DiscardSavedData = dsav
  Report1.SelectionFormula = where
  Report1.WindowTitle = rti
  On Error Resume Next
  Report1.Action = 1
  If err <> 0 Then
    msgbox “作表でエラーが発生しました。”
  End If
  On Error GoTo 0

  ・データコントロール(ADC 等) とオートメーションリンクする場合は、
      ReportSource = 3 ‘crptDataControl
    と指定する。(古いパージョンは、ADC には対応していない。)
    但し、帳票定義パターンは使用できない。

  dim rti as string
  dim rpt as string
  dim ppre as string
  dim cpis as string
  dim dsav as string
  dim sql as string
  
  rti = “レポートタイトル”
  rpt = “l_juchu.rpt”
  ppre = 0 ‘プレビュー
  cpis = 1
  dsav = 1 ‘データ保存
  sql = “select * from 受注m where 得意先CD = ‘2000′”
  Data1.RecordSource = sql
  Data1.Refresh

‘** 印刷
  Report1.ReportFileName = rpt
  Report1.ReportSource = 3 ‘crptDataControl
  Report1.Destination = ppre
  Report1.PrinterCopies = cpis
  Report1.DiscardSavedData = dsav
  Report1.WindowTitle = rti
  On Error Resume Next
  Report1.Action = 1
  If Err <> 0 Then
    MsgBox “作表でエラーが発生しました。”
  End If
  On Error GoTo 0