2009-08-10 77 views
0

我們有一個Crystal Report,它允許用戶選擇要過濾的幾個字段中的哪一個。在記錄選擇公式,我們有像下面的代碼:如何根據多個字符串參數或字符串數​​組篩選數字字段?

if {?First Selection Type} = "CUSTOMER CODE" then {foo.CustCode} in {?First Selection Value} 
else if {?First Selection Type} = "ORDER" then {bar.OrderNum} in {?First Selection Value} 
... 

{?First Selection Value}參數定義爲多個字符串參數,因爲一些選擇需要使用的字符串。

不幸的是,bar.OrderNum字段是數字。

如果我嘗試將上面的代碼放入,Crystal Reports會提供錯誤「此處需要數字範圍」。

如果我把CStr({bar.OrderNum})保存沒有錯誤,但是在生成SQL語句時不包含該條件,導致性能惡化,因爲它從數據庫中拉下每個訂單並在客戶端搜索它們。

如果我把ToNumber({?First Selection Value})CDbl({?First Selection Value})給出錯誤「這個數組必須是下標的,例如:Array [i]」。

我需要一些方法來使這個標準去數據庫服務器,而不會使參數更混亂的用戶。

如果有問題,我們使用Crystal Reports 11.0.0.895對照Progress OpenEdge 10.1B03數據庫。

回答

0

我發現,解決辦法似乎工作就是創建一個名爲OrderNumStr以下表達式一個SQL表達式:

CAST("bar1"."SOrderNum" AS VARCHAR(10)) 

,然後更改記錄選擇:

if {?First Selection Type} = "CUSTOMER CODE" then {foo.CustCode} in {?First Selection Value} 
else if {?First Selection Type} = "ORDER" then {%OrderNumStr} in {?First Selection Value} 
... 

這至少將標準發送到服務器端,儘管它阻止了數據庫服務器使用索引,所以它並不理想。與之前的工作相比,它仍然是一個巨大的性能改進。

P.S. (我需要在數據庫專家中將表格從bar重命名爲bar1,以使SQL表達式可以正常工作,但這可能是特定於進度的。)