- - PR -
CrystalReportにvbからパラメータを渡すには?
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-15 18:53
Vb6.0とCrystalReport9.2を使用して開発を行っています。
Vbから、パラメータに値を渡したいのですが、うまく行きません。 クリスタルレポートは、コマンドで作成し、 SQLを編集できるようにしているのですが、テーブル名を可変にしたい為 パラメータでテーブル名を渡そうと考えています。 SELECT {?ta}."コード" From {?ta} でレポートのSQLを作成しました。 ※taにはデフォルトのテーブル名を指定して作成しました。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3984&forum=7 を参考にしたのですがパラメータ情報を引き渡す、ParameterFieldInfoのプロパティが Dim objReport As CRAXDDRT.Report で作成した変更にありませんでした。 その為VB側から、下記のソースでテーブル名を渡そうとしました。 Dim objReport As CRAXDDRT.Report Dim objApplication As New CRAXDDRT.Application Set objReport = objApplication.OpenReport("レポート名") Call objReport.ParameterFields.GetItemByName("ta").AddCurrentValue("テーブル名") Call objReport.ParameterFields.GetItemByName("ta").SetNthDefaultValue(1, "テーブル名") しかし、CurrentValueとDefaultValueの値を確認した所、 SetNthDefaultValueでDefaultValueの値は変更できるのですが、 CurrentValueの値の変更ができません。 そのせいか、レポート側でテーブルがないとエラーになります。 どのような方法をとれば、 CurrentValueの値を変更することができるのでしょうか? それとも、やり方自体が間違っていますか? 教えて下さいお願い致します。 | ||||||||||||
|
投稿日時: 2005-12-16 00:23
ケイさんの場合、VB6 なのですよね?
SetNthDefaultValue メソッドをコメントアウトするとどうなりますか? またデバッガを使って、objReport.ParameterFields.Item(x) の値なども確認してください。 どの時点で失われているのか、または設定できていないのかを検証する必要があります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-12-16 09:58
返信ありがとうございます。
そうです。
Set objReport = objApplication.OpenReport("レポート名") の後、デバッガでは ParameterFields.Item(1).CurrentValue="デフォルトテーブル名" ParameterFields.Item(1).DefaultValue="デフォルトテーブル名" でした。 Call objReport.ParameterFields.GetItemByName("ta").AddCurrentValue("テーブル名") の後では変わらずに ParameterFields.Item(1).CurrentValue="デフォルトテーブル名" ParameterFields.Item(1).DefaultValue="デフォルトテーブル名" のままでした。 Call objReport.ParameterFields.GetItemByName("ta").SetNthDefaultValue(1, "変更テーブル名") の後では、 ParameterFields.Item(1).CurrentValue="デフォルトテーブル名" ParameterFields.Item(1).DefaultValue="変更テーブル名" になり、CurrentValueは変わらずに、DefaultValueだけ変わります。 で、レポートを呼び出すと行セットが開けません。テーブルが無効と言われます。 SetNthDefaultValueを行わないと、CurrentValueとDefaultValueは "デフォルトテーブル名"のままで結局行セットが開けません。テーブルが無効になります。 objReport.ParameterFields.Item(x) の値の確認とは、 objReport.ParameterFields.Item(x).valueの値でよろしいですか? ※objReport.ParameterFields.Item(x)までだとプロパティまたはメソッドをサポート していない〜とエラーになるので。 ちなみにobjReport.ParameterFields.Item(x).valueはnullでした。 objReport.ParameterFields.Item(x).valuetype=crstringFieldsです。 他には、どこを確認したらよろしいでしょうか? | ||||||||||||
|
投稿日時: 2005-12-16 10:14
ParameterFields クラスは .NET オンリーだったような気がします。
AddCurrentValue メソッドをコメント アウトすると正常に、 初期設定されたテーブルのレコードが出力されますか?
おかしいなぁ... できるハズなんですけど。 今、環境がないので確認できませんが、以前同じようなことをしたことがあります。 ...では、レポートに 1 つパラメータ フィールドを新規で追加して、 同じような実装を施した場合に変更が適用できるか検証して頂けませんか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-12-16 12:13
そうですね。初期設定のテーブルがあれば、そのデータが出力されます。
レポートのパラメータとしてtes1を追加しました。 これは、レポートのフィールドエクスプローラーから、パラメータを新規追加して、 デフォルト値は何も設定しませんでした。 この場合、 Set objReport = objApplication.OpenReport("レポート名") の後では、 ParameterFields.Item(2).CurrentValue=Empty値 ParameterFields.Item(2).DefaultValue=Empty値 でした。 Call objReport.ParameterFields.GetItemByName("tes1").AddCurrentValue("変更テーブル名") とSetNthDefaultValueの後両方とも ParameterFields.Item(2).CurrentValue=Empty値 ParameterFields.Item(2).DefaultValue="変更テーブル名" でした。 やはりCurrentValueの値は変わりません。 CurrentValueの更新を可能にするか、変更できないかの設定が どこかにあるのでしょうか? | ||||||||||||
|
投稿日時: 2005-12-16 17:09
パラメータの変更ができるようになりました。
原因は、パラメータのデフォルト値を一つしか設定していなかった為、 VB側からの変更ができないようでした。 複数設定する事で、可能になりました。 パラメータを初めて使った為に設定の仕方が分からなくこのような 初歩的な間違いになっていました。 申し訳ありません。 じゃんぬねっとさん本当にありがとうございました。 |
1