- - PR -
CrystalReportsのデータソース先の動的に変更できない?
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2005-05-24 09:53
返信が遅れて申し訳ありません。
GTG様にはお礼と謝罪をしなければなりません。 GTG様から教えて頂いた方法で、ConnectionPropertiesだけでなく、SetLogOnInfoでも データソースを変更できる事が分かりました。 ただし、テーブルが両方に存在する時に限り。ですが・・・・ 私が作成しているプログラムでは、 下記の手順でクリスタルレポートを呼び出して表示しています。 1,クリスタルレポートで使用するテーブルを作成 2,作成したテーブルにデータを登録 3,クリスタルレポートを呼出。 4,終了の際にテーブルを削除。 テーブル名は可変ではないのですが、テーブルは常に存在する訳ではなく、 クリスタルレポートの表示時にだけ作成する為、 ConnectionPropertiesもSetLogOnInfoの時もLocationでテーブルを指定する際に、 (local)と変更先DBのテーブルの置換を行うが、 (local)にテーブルがない為にエラーが発生しているようでした。 上記の事をふまえた上で、プログラムの見直しを考えてみます。 GTG様色々と申し訳ありませんでした。 そして本当にありがとうございました。 |
|
投稿日時: 2005-05-24 10:31
ケイ様
あらま、テーブルを削除していたとは想像していませんでした。 試したことはないですが、以下のような記述ではどうでしょうか。 これは既存のものに変更するのではなく、新規に作成するようなイメージかと思います。 データベースの接続方法を変更するときに利用できます。 (例) With m_Report .Database.Tables.Item(1).ConnectionProperties.DeleteAll .Database.Tables.Item(1).ConnectionProperties.Add "Provider","SQLOLEDB" .Database.Tables.Item(1).ConnectionProperties.Add "Data Source","SQLサーバー名" .Database.Tables.Item(1).ConnectionProperties.Add "User ID","ユーザー名" .Database.Tables.Item(1).ConnectionProperties.Add "Password","パスワード" .Database.Tables.Item(1).ConnectionProperties.Add "Initial Catalog","データベース名" .Database.Tables.Item(1).Location = "dbo.テーブル名" End With |
|
投稿日時: 2005-05-24 12:37
.Database.Tables.Item(1).Location = "dbo.テーブル名" は、必要ないかもしれません。
|
|
投稿日時: 2005-05-24 13:23
既存変更ではなく新規に作成するようなプロパティも存在するんですね。
勉強になります。 しかし残念ながら、同じようにLocationで「テーブルがありません」と エラーになってしまいますね。 やはりレポートの登録内容とプロパティで設定した内容が別の場合、 チェックし、一致した場合に置換が行われるのでしょうね。 レポート作成する際にテーブルが無い事には作成できないのですし、 存在している事が前提なんでしょうね。 ありがとうございました。 |
|
投稿日時: 2005-05-24 13:57
ケイ様
Locationプロパティのコード無しでもだめですか。 あと、ADOレコードセットを利用すること方法はどうでしょう。この場合、物理的なデータベースに接続なしでレポートをデザインすることができます。VBプログラム内でADOレコードセットを生成して、そのレコードセットをレポートに渡すことで表示が可能です。VBプログラム内でテーブルを生成しているなら、この方法でも実現できるかもしれませんよ。 |
|
投稿日時: 2005-05-24 18:06
>ADOレコードセットを利用すること方法はどうでしょう。
>この場合、物理的なデータベースに接続なしでレポートを >デザインすることができます。VBプログラム内でADOレコードセットを生成して、 >そのレコードセットをレポートに渡すことで表示が可能です。 そうですね。 この方法でもいいかもしれませんね。 ただ問題は、ほとんどプログラムは完成に近い状態で 今まで作成されたレポートの個数が結構あるという事です・・・・ 色々話てみて、修正しやすい方向を選ぶ事になるとは思います。 では。 |
|
投稿日時: 2005-05-24 23:11
ケイ様
OLEDB接続で作成したレポートは、ADOレコードセットを利用した以下のコードで 接続先を変更することができます。 (例) Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Dim sSQL As String Set cn = CreateObject("ADODB.Connection") 'SQLサーバーの接続 cn.ConnectionString = "Provider=SQLOLEDB.1;" & _ "Data Source=SQLサーバー名;" & _ "Persist Security Info=False;" & _ "User ID=ユーザー名;" & _ "Password=パスワード;" & _ "Initial Catalog=データベース名;" cn.Open 'Recordsetオブジェクトの生成 Set rs = New ADODB.Recordset sSQL = "Select * from テーブル名" rs.Open sSQL, cn, adOpenDynamic, adLockOptimistic そして、既存のCrystal Reportsの処理の中でデータベースの接続は行わず、 以下のコードを利用します。 m_Report.DiscardSavedData m_Report.Database.SetDataSource rs, 3, 1 ご参考まで・・ |
