- PR -

CrystalReportにvbからパラメータを渡すには?

1
投稿者投稿内容
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 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の値を変更することができるのでしょうか?
それとも、やり方自体が間違っていますか?

教えて下さいお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-16 00:23
引用:

ケイさんの書き込み (2005-12-15 18:53) より:

を参考にしたのですがパラメータ情報を引き渡す、ParameterFieldInfoのプロパティが
Dim objReport As CRAXDDRT.Report
で作成した変更にありませんでした。


ケイさんの場合、VB6 なのですよね?

引用:

しかし、CurrentValueとDefaultValueの値を確認した所、
SetNthDefaultValueでDefaultValueの値は変更できるのですが、
CurrentValueの値の変更ができません。
そのせいか、レポート側でテーブルがないとエラーになります。


SetNthDefaultValue メソッドをコメントアウトするとどうなりますか?
またデバッガを使って、objReport.ParameterFields.Item(x) の値なども確認してください。
どの時点で失われているのか、または設定できていないのかを検証する必要があります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2005-12-16 09:58
返信ありがとうございます。

引用:

じゃんぬねっとさんの書き込み (2005-12-16 00:23) より:
ケイさんの場合、VB6 なのですよね?


そうです。

引用:

SetNthDefaultValue メソッドをコメントアウトするとどうなりますか?
またデバッガを使って、objReport.ParameterFields.Item(x) の値なども確認してください。
どの時点で失われているのか、または設定できていないのかを検証する必要があります。



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です。

他には、どこを確認したらよろしいでしょうか?



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

ケイさんの書き込み (2005-12-16 09:58) より:

そうです。


ParameterFields クラスは .NET オンリーだったような気がします。

引用:

そのせいか、レポート側でテーブルがないとエラーになります。


AddCurrentValue メソッドをコメント アウトすると正常に、
初期設定されたテーブルのレコードが出力されますか?

引用:

CurrentValueは変わらずに、DefaultValueだけ変わります。


おかしいなぁ... できるハズなんですけど。
今、環境がないので確認できませんが、以前同じようなことをしたことがあります。

...では、レポートに 1 つパラメータ フィールドを新規で追加して、
同じような実装を施した場合に変更が適用できるか検証して頂けませんか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2005-12-16 12:13
引用:

じゃんぬねっとさんの書き込み (2005-12-16 10:14) より:
AddCurrentValue メソッドをコメント アウトすると正常に、
初期設定されたテーブルのレコードが出力されますか?


そうですね。初期設定のテーブルがあれば、そのデータが出力されます。

引用:

...では、レポートに 1 つパラメータ フィールドを新規で追加して、
同じような実装を施した場合に変更が適用できるか検証して頂けませんか?



レポートのパラメータとして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の更新を可能にするか、変更できないかの設定が
どこかにあるのでしょうか?





ケイ
大ベテラン
会議室デビュー日: 2004/04/20
投稿数: 100
投稿日時: 2005-12-16 17:09
パラメータの変更ができるようになりました。

原因は、パラメータのデフォルト値を一つしか設定していなかった為、
VB側からの変更ができないようでした。

複数設定する事で、可能になりました。
パラメータを初めて使った為に設定の仕方が分からなくこのような
初歩的な間違いになっていました。

申し訳ありません。

じゃんぬねっとさん本当にありがとうございました。
1

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