2011-02-16 96 views
6

水晶版 - 水晶報表2008 Business Objects公司 - 十一水晶報表 - 將參數添加到「命令」查詢

我已經寫了一個查詢來填充報表並希望在基於參數到查詢拉來自用戶的輸入。我的問題是,我需要在'Where'子句的第一行接受參數的正確語法是什麼?

這裏是我用水晶報表查詢:

Select 
Projecttname, 
ReleaseDate, 
TaskName 

From DB_Table 

Where 
(Project_Name like {?Pm-?Proj_Name})) and 
(ReleaseDate) >= currentdate 
+0

我已經嘗試過在SQL的頂部聲明並設置一個變量,當我查看子報表的SQL時,我仍然看不到SQL中選擇的參數。難道我做錯了什麼?聲明@ProjName VARCHAR(200) 組@ProjName = '{?PM-?PROJ_NAME}' 選擇 Projecttname, RELEASEDATE, TASKNAME 從DB_Table 凡 (PROJECT_NAME)等@ProjName和 (RELEASEDATE)> =當前日期 – 2011-02-16 19:30:09

回答

6

我想出瞭解決辦法如下:

  1. 在你最喜歡的查詢開發工具創建的SQL查詢
  2. 在Crystal Reports的主報告中,創建參數傳遞給子報表
  3. 使用「報告創建嚮導」的「數據」部分中的「添加命令」選項和#1的SQL查詢創建子報告。
  4. 一旦報表被添加到主報告,右擊報表,選擇「更改子報表鏈接...」,選擇鏈接字段,取消選中「根據現場的報表選擇數據:」

    注意:您可能必須最初添加參數,並選中「在子報表中選擇基於字段的數據:」,然後返回到「更改子報表鏈接」,並在創建子報表後取消選中該參數。

  5. 在子報表中點擊'報告'菜單'選擇專家',使用'公式編輯器',將#1中的SQL列設置爲等於或者像#4中選擇的參數一樣。

       (Subreport SQL Column) (Parameter from Main Report) 
         Example: {Command.Project} like {?Pm-?Proj_Name} 
    
0

試試這個:

Select Project_Name, ReleaseDate, TaskName 
From DB_Table 
Where Project_Name like '{?Pm-?Proj_Name}' 
    And ReleaseDate >= currentdate 

的currentdate應該是一個有效的數據庫功能或領域的工作。如果您使用的是MS SQL Server,請改爲使用GETDATE()。

如果您只想根據主報表中的參數篩選子報表中的記錄,則可以更簡單地將該表添加到子報表中,然後在主報表和子報表之間創建一個Project_Name鏈接。然後,您可以使用Select Expert來篩選ReleaseDate。

+0

這會工作嗎?哪裏Project_Name像?'{?Pm-?Proj_Name}' 當我運行查詢並轉到'數據庫','顯示SQL'時,我仍然看到文本'{?Pm-?Proj_Name}',而不是參數我進入了。那是對的嗎? – 2011-02-16 19:13:50

+0

所以我試圖在SQL的頂部聲明並設置一個變量。 – 2011-02-16 19:27:29

9

當您在命令中時,單擊創建以創建新參數;稱之爲'project_name'。創建完成後,雙擊它的名稱將其添加到命令的文本中。您查詢應類似於:

SELECT Projecttname, ReleaseDate, TaskName 
FROM DB_Table 
WHERE Project_Name LIKE {?project_name} + '*' 
AND ReleaseDate >= getdate() --assumes sql server 

如果需要的話,主報告鏈接到報表上這個({PROJECT_NAME?})字段。如果您未在主報告和子報告之間建立鏈接,則CR會提示您輸入子報告的參數。

在2008年之前的版本中,命令的參數只允許爲標量值。

3
Select Projecttname, ReleaseDate, TaskName From DB_Table Where Project_Name like '%{?Pm-?Proj_Name}%' and ReleaseDate >= currentdate 

注單引號和通配符。我花了30分鐘找出類似的東西。