2012-05-18 34 views
0

我正在使用Crystal Reports XI構建一個報表,調用期望參數@Type_ID和@Subtype_ID的SQL Server存儲過程。在Crystal Reports XI中,我可以從動態級聯參數填充存儲的兩個過程參數嗎?

數據庫中還有一個表格,它將一種多對一的關係中的類型和子類型關聯起來。

我想有報告的參數提示屏幕問:

  • 類型 - 無論是上市類型或Null之一。如果爲空,屏幕將不會詢問子類型。

  • 子類型 - 與所選類型或空值關聯的列出的子類型之一。

...並將這兩個值分別作爲@Type_ID和@Subtype_ID傳遞給存儲過程。 (如果存儲過程獲得@Type_ID = Null,它將返回所有類型的記錄,如果它獲得了@Type_ID <> Null和@Subtype_ID = Null,它將返回與所選類型相關的所有子類型的記錄。)

有沒有辦法讓我的水晶報告做到這一切?

到目前爲止,使用建議從this answer,我設置動態級聯參數(DCP)上@Subtype_ID,這要求一個類型,然後在我上面描述的方式的子類型,則通過所選擇的子類型至@ Subtype_ID。但是,我還沒有想出如何將通過此DCP選擇的類型傳遞給@Type_ID,以便如果子類型爲Null,那麼存儲過程可以返回具有所選類型的所有記錄。

回答

2

問題是您的程序的定義創建了兩個參數:TYPE_IDSUBTYPE_ID。 Crystal Reports的參數(動態或靜態)不是爲了彼此交互而設計的。

在我看來,你有三種選擇:

  • 創建報告瓦特/ 提示組(請確保提示組創建兩個參數)要(主報告不需要數據源,btw);插入一個使用你的程序的子報告(它會創建兩個參數);將主報告中的參數鏈接到子報告中的參數;如有必要,您可以在主報告中創建公式(然後將其鏈接到子報表中的兩個參數)以獲取額外的邏輯(例如,將「所有類型ID」的參數值轉換爲NULL)。

  • 重構您的程序使其具有單個VARCHAR參數,該參數將接收級聯的TYPE_IDSUBTYPE_ID。創建一個動態參數,該參數將具有關鍵字和描述的連接值(例如1/3;類型[1] - 子類型[3])。您的程序邏輯將需要解析參數的值以確定TYPE_IDSUBTYPE_ID的值。您需要創建一個生成密鑰和描述的查詢,這些密鑰和描述將通過BusinessView的各個層次展示。

  • 放棄該過程以支持Command或「正常」查詢。以我的經驗,絕大多數報告都可以在沒有存儲過程的情況下編譯。結合使用單個提示組,這將爲您提供所需的靈活性。

+0

謝謝!我沿着第二種選擇的方式實施了一些東西。 –

+0

太好了。不要忘記將問題標記爲已回答。 – craig

+0

我不會;我只是想再看看其他人是否有答案。 –

相關問題