- PR -

クリスタルレポートでパラメーター例外

1
投稿者投稿内容
br
会議室デビュー日: 2008/03/27
投稿数: 6
投稿日時: 2008-09-24 19:49
VS2005 Pro版 + 付属クリスタルレポートでasp.netの開発中です。

ある程度デザインして実行してみたところ、「パラメータ値がありません。」例外が
発生してしまい、先に進みません。原因に心当たりのある方、ご教示願います。

ソースは以下の様な実装です。

ReportDocument doc = new ReportDocument();
doc.Load("〜.rpt");
doc.SetParameterValue("@key1", "value1");
doc.SetParameterValue("@Key2", "value2");
doc.SetParameterValue("@Key3", "value3");
doc.SetParameterValue("Key4", "value4");
doc.SetParameterValue("Key5", "value5");
doc.SetDataSource(DataTable1);
doc.ExportToDisk(ExportFormatType.PortableDocFormat, "〜.pdf");

例外はExportToDiskのタイミングで発生しています。
〜.rpt のパラメータフィールドは
@key1, @key2, @key3, key4, key5
があり、@key1〜@key3はデータベースフィールドに与えた
ストアドの引数が自動で設定された様子です。
key4, key5 が明示的に追加したパラメータです。


_________________
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-09-24 23:54
引用:

brさんの書き込み (2008-09-24 19:49) より:

key4, key5 が明示的に追加したパラメータです。


明示的に追加したのであれば、その部分のコードはありますか? デザイナによる設定ですか? いずれにせよ認識している中のどこかに矛盾があるだけのような気がします。 Parameter を列挙して何が存在しないのかハッキリさせた方が早いでしょうね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
br
会議室デビュー日: 2008/03/27
投稿数: 6
投稿日時: 2008-09-25 01:21
引用:

じゃんぬねっとさんの書き込み (2008-09-24 23:54) より:
明示的に追加したのであれば、その部分のコードはありますか? デザイナによる設定ですか? いずれにせよ認識している中のどこかに矛盾があるだけのような気がします。 Parameter を列挙して何が存在しないのかハッキリさせた方が早いでしょうね。



デザイナの右ボタンで追加しています。
いまのところ、特定のパラメーターが未設定なのか、すべてが未設定となってしまっているのかも不明です。。。
明日(というか、今日)いろいろと試したいと思っています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-09-25 10:48
引用:

brさんの書き込み (2008-09-25 01:21) より:

デザイナの右ボタンで追加しています。


で、あれば "Key4" と "Key5" というパラメータ名にはなっていないと思います。 "@" など何らかのプリフィクスが先頭に追加されるハズです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
br
会議室デビュー日: 2008/03/27
投稿数: 6
投稿日時: 2008-09-25 14:09
解決しました。
doc.SetParameterValue(...);
doc.SetDataSource(...);
doc.ExportToDisk(...);
としていたのですが、ステップ実行しながら確認したところ、
1. SetParameterValue()した後ではdoc.ParameterFields[0].CurrentValues[0].Valueには値がセットされている。
2. 続いてSetDataSource()すると、上記Valueの値がnullとなっている。
ことが判ったので、ためしにSetParameterValueとSetDataSourceの順序を
逆にしたところ、期待通りの動きになりました。
順序も重要なのですねぇ。


じゃんぬさん、お手数をおかけして申し訳ありませんでした。
ちなみに、フィールドエクスプローラ→パラメータ フィールド→右ボタン→新規...
で表示される「パラメータ フィールドの作成」ダイアログでパラメータ名を入力する
ので、特に固定のプリフィックスは付かないのでは ? と思っています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-09-25 15:46
引用:

brさんの書き込み (2008-09-25 14:09) より:

ことが判ったので、ためしにSetParameterValueとSetDataSourceの順序を
逆にしたところ、期待通りの動きになりました。順序も重要なのですねぇ。


ああ、気付けれませんでした。orz
バウンドした時に剥がれてしまうんでしたね。

引用:

ちなみに、フィールドエクスプローラ→パラメータ フィールド→右ボタン→新規...
で表示される「パラメータ フィールドの作成」ダイアログでパラメータ名を入力する
ので、特に固定のプリフィックスは付かないのでは ? と思っています。


私が式フィールドと勘違いしていたのだと思います。 申し訳ないです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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