- PR -

CrystalReportのデータソースは動的に変更できるか

1
投稿者投稿内容
クニモニ
常連さん
会議室デビュー日: 2003/06/17
投稿数: 22
投稿日時: 2003-07-10 11:13
いつもお世話になっております。

今回は、レポートに使用しているデータソースをプログラム側で
動的に変更できるかという質問です。
おそらくシステムのデータベースを変更するという処理はあまり発生しないとは思いますが、もしデータベースを変更する必要があった場合に全てのrptファイルに対してデータソースの変更を行なう必要が生じてくるだろうと考えました。

どなたか良い知恵がございましたら、よろしくお願いいたします。
bubunya
大ベテラン
会議室デビュー日: 2003/01/16
投稿数: 124
投稿日時: 2003-07-11 16:14
同じデータソースであれば簡単です。但し、フィールド名は同じでないと駄目です。違う場合はマッピングの API を利用する必要があると思います。
データベースの種類を変更する事も可能ですが、デザイナーならともかく、API だけでやるのは面倒かと。ACCESS や MSDE を使ってテストしてみると良いです。

.NET の場合は ADO.NET 側で対応した方が簡単なような気もします。
クニモニ
常連さん
会議室デビュー日: 2003/06/17
投稿数: 22
投稿日時: 2003-07-15 19:03
ありがとうございます。
早速、DataSetを使ってレポートを表示する方法に挑戦してみたのですが、
またもや壁にぶつかってしまいました。
レポートで複数のテーブルを使用している時や、サブレポートを使用している時の設定のしかたがわからないのです。
いろいろと手探りで行っているのですが、未熟ゆえどうしてもうまく動作してくれません。
なにかサンプルコードなどがありましたら、ぜひご教授よろしくお願いいたします。

ちなみに、うまく動作したコードを以下に記述します。
DataSet1にはTABLE1を配置しており、CrystalReport1では
そのDataSetのTABLE1をデータソースとして使用しています。

CrystalReprtViewer view = new CrystalReportViewer() ;
DataSet1 dataset = new DataSet1() ;
CrystalReport1 cr1 = new CrystalReport1() ;
string myString = "Initial Catalog=DB名; Data Source=サーバー名;
user id=ユーザー名; password=パスワード" ;
string mySelectQuery = "Select * From TABLE1";
SqlConnection myConnection = new SqlConnection (myString) ;
SqlDataAdapter myAdaputer = new SqlDataAdapter( mySelectQuery , myConnection );
myAdaputer.Fill(dataset , "TABLE1") ;
cr1.SetDataSource(dataset) ;
view.ReportSource = cr1 ;
view.Show() ;



bubunya
大ベテラン
会議室デビュー日: 2003/01/16
投稿数: 124
投稿日時: 2003-07-16 11:45
テーブル毎に設定してください。(リンクは MSDN Apr になってます)

ms-help://MS.MSDNQTR.2003APR.1041/crystlrf/html/crlrftableclasssetdatasourcemethodtopic.htm

サブレポートはSubreportObjectを取得すれば後は同じだと思います。
ms-help://MS.MSDNQTR.2003APR.1041/crystlrf/html/crlrfsubreportobjectclasstopic.htm

ADO <-> DBへの直接接続なんかも出来るんですが、複数テーブルなのか否か等で設定も違うので結構はまります。
わからない場合はサポートに聞くか、英語サイトのサンプル(沢山ある)を見てます。
クニモニ
常連さん
会議室デビュー日: 2003/06/17
投稿数: 22
投稿日時: 2003-07-16 11:47
ありがとうございます。
早速試してみます!
1

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