0

パラメータ@Type_IDと@Subtype_IDを期待するSQLServerストアドプロシージャを呼び出すCrystalReportsXIを使用してレポートを作成しています。

データベースには、タイプとサブタイプを1対多の関係で関連付けるテーブルもあります。

レポートのパラメータプロンプト画面で次のことを求められます。

  • タイプ-リストされているタイプのいずれかまたはNull。Nullの場合、画面はサブタイプを要求しません。

  • サブタイプ-選択したタイプまたはヌルに関連付けられている、リストされているサブタイプのいずれか。

...そして、これら2つの値をそれぞれ@Type_IDおよび@Subtype_IDとしてストアドプロシージャに渡します。(ストアドプロシージャが@Type_ID = Nullを取得すると、すべてのタイプのレコードが返されます。@ Type_ID<>Nullおよび@Subtype_ID=Nullを取得すると、選択したタイプに関連付けられているすべてのサブタイプのレコードが返されます。)

私のCrystalレポートにこれをすべて実行させる方法はありますか?

これまでのところ、この回答からのアドバイスを使用して、@ Subtype_IDに動的カスケードパラメーター(DCP)を設定します。これは、上記の方法でタイプとサブタイプを要求し、選択したサブタイプを@Subtype_IDに渡します。ただし、このDCPで選択したタイプを@Type_IDに渡す方法はまだわかりません。そのため、サブタイプがNullの場合、ストアドプロシージャは、選択したタイプのすべてのレコードを返すことができます。

4

1 に答える 1

2

問題は、プロシージャの定義が2つのパラメータを作成することです:TYPE_IDSUBTYPE_ID。Crystal Reportsのパラメータ(動的または静的)は、相互に作用するようには設計されていません。

私が見ているように、3つのオプションがあります。

  • 必要な単一のプロンプトグループ(プロンプトグループが2つのパラメーターを作成することを確認してください)を使用してレポートを作成します(メインレポートはデータソースを必要としません、ところで)。プロシージャを使用するサブレポートを挿入します(2つのパラメータが作成されます)。メインレポートのパラメータをサブレポートのパラメータにリンクします。必要に応じて、メインレポートに数式を作成し(サブレポートの2つのパラメーターにリンクする)、追加のロジックを作成できます(たとえば、「すべてのタイプID」のパラメーター値をNULLに変換します)。

  • プロシージャをリファクタリングして、連結されたとVARCHARを受け取る単一のパラメータを設定します。キーと説明の値を連結する動的パラメーターを作成します(例:1/3;タイプ[1]-サブタイプ[3])。プロシージャのロジックは、パラメータの値を解析してとの値を決定する必要があります。キーと説明を生成するクエリを作成する必要があります。これらは、BusinessViewのさまざまなレイヤーを通じて公開されます。TYPE_IDSUBTYPE_IDTYPE_IDSUBTYPE_ID

  • コマンドまたは「通常の」クエリを優先して、プロシージャを破棄します。私の経験では、レポートの大部分はストアドプロシージャなしで作成できます。単一のプロンプトグループと組み合わせると、必要な柔軟性が得られます。

于 2012-05-22T11:47:31.733 に答える