VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2007/07/26(Thu) 12:55
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe^4: プレビュー印刷後に印刷したいのですが

> どなたかデータレポートをDataEnvironmentを使わずに
> データベースの情報を印刷する方法を伝授してください。

DataEnvironment の存在までは知っておられるようなので、
 (1) SQL Server からデータを取得する手順までは把握している。
 (2) DataEnviroment 経由で印刷する方法も把握している。
という前提で回答したいのですが、それで良いでしょうか?


もし、(1)が良く分からないというのであれば、印刷処理より前の問題となりますので、
まずは ADO によるデータベース処理について、調査しておいてください。
もし、その時点で躓くようであれば、別途、スレッドを分けて質問をお願いします。


次に (2) ですが、DataEnvironment 無しの DataReport 印刷は、DataEnvironment 有りの
時よりも難易度が上がります。帳票のデザイン方法など、DataReport ツールの基本的な利用法を
覚えるためにも、(2) の件も事前に把握しておいてください。
もし、その (2) で躓いているようであれば、VB6のヘルプ(MSDN)に、具体例を交えた
DataReport のチュートリアルが掲載されていますので、そちらを参考にされると良いでしょう。


---
さて、本題。

通常、DataReport には DataEnviroment を割り当てますが、それ以外にも
実行時に ADODB.Recordset を Set することも可能です。
(DataSource をデザイン時に設定したいなら、DataEnviroment を使うしかありません)

今回の場合、その Recordset には、SQL Server から得たデータが取得されていることに
なるわけですが、ここで注意点があります。

DataReport 側でグループ化の機能を使っていなければ、そのまま
    Set DataReport1.DataSource = rs
    DataReport1.DataMember = ""
    DataReport1.Show vbModal, Me
だけでプレビューできるのですが、グループ化の機能を必要としている場合、
通常の Recordset では期待動作しません。


グループ化された印刷が必要な場合は、「階層型レコードセット」といって、
 Set rs2 = rs1.Fields("x").Value
のように、「子 Recordset を返す列」を持つ、階層構造的な Recordset を使うことになります。

これは、普段使っているSQL Server 用プロバイダ(Provider=SQLOLEDB)ではなく、
データシェイプ プロバイダ(Provider=MSDataShape)を使うことになります。
また、発行する SQL も、「SHAPE コマンド」という MSDataShape 専用の構文となります。

# ちなみに DataEnvironment の「子コマンドの追加」機能は、これらの SHAPE コマンドを
# 自動生成するためのデザイナツールでもあります。

「SHAPE コマンド」の例などは、ADO のヘルプ(MSDN/MDAC SDK)に掲載されていますので、
そちらをご覧ください。



以上、概要までに。

より詳細な説明が必要であれば、具体的にどの部分で躓いているのかを明示していただければ、
わかる範囲で回答しますよ。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -