Crystal reports Crystal Reports-向“命令”查询添加参数

Crystal reports Crystal Reports-向“命令”查询添加参数,crystal-reports,Crystal Reports,水晶版-水晶报告2008 业务对象-XI 我编写了一个用于填充子报表的查询,并希望根据用户的输入向该查询中引入一个参数。我的问题是,我需要在“Where”子句的第一行中输入什么样的正确语法来接受参数 以下是我在Crystal Reports中使用的查询: Select Projecttname, ReleaseDate, TaskName From DB_Table Where (Project_Name like {?Pm-?Proj_Name})) and (ReleaseDate)

水晶版-水晶报告2008 业务对象-XI

我编写了一个用于填充子报表的查询,并希望根据用户的输入向该查询中引入一个参数。我的问题是,我需要在“Where”子句的第一行中输入什么样的正确语法来接受参数

以下是我在Crystal Reports中使用的查询:

Select 
Projecttname,
ReleaseDate,
TaskName

From DB_Table

Where
(Project_Name like {?Pm-?Proj_Name})) and 
(ReleaseDate) >= currentdate
试试这个:

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 Projecttname, ReleaseDate, TaskName
FROM DB_Table
WHERE Project_Name LIKE {?project_name} + '*'
AND ReleaseDate >= getdate() --assumes sql server
如果需要,将主报告链接到此{?project_name}字段上的子报告。如果未在主报表和子报表之间建立链接,CR将提示您输入子报表的参数


在2008年以前的版本中,命令的参数只能是标量值。

我提出的解决方案如下:

在您喜爱的查询开发工具中创建SQL查询 在Crystal报表中,在主报表中,创建要传递给子报表的参数 使用“报表创建向导”的“数据”部分中的“添加命令”选项和来自1的SQL查询创建子报表。 将子报表添加到主报表后,右键单击子报表,选择“更改子报表链接…”,选择链接字段,然后取消选中“根据字段选择子报表中的数据:”

注意:您可能需要首先添加参数,并选中“基于字段选择子报表中的数据”,然后返回“更改子报表链接”,并在创建子报表后取消选中该参数

在子报表中,单击“报表”菜单“选择专家”,使用“公式编辑器”,将SQL列从1设置为等于或类似于在4中选择的参数

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

请注意单引号和通配符。我只花了30分钟就想出了类似的办法。

这样行吗?当我运行查询并转到“数据库”、“显示SQL”时,我仍然看到文本“{?Pm-?Proj_Name}”,而不是我输入的参数。这是正确的吗?所以我尝试在SQL顶部声明并设置一个变量。Show SQL仍将显示参数名。我假设您想在where子句中使用通配符?您可以使用以下SQL通配符:%:匹配所有字符。\u:匹配单个字符。示例:其中项目名称“{?Pm-?Proj_Name}%”用于加载项目名称包含{?Pm-?Proj_Name}的记录。其中Project_Name(如“{Pm-?Proj_Name}”)加载带有Project_Name(在{Pm-?Proj_Name}之前有一个字母)的记录。声明和设置变量不会产生任何影响。当您在我的回答中使用查询时,是否收到错误消息?如果是,那是什么?不,我没有得到一个错误。但是,当我显示子报表的查询时,我看不到我输入的参数。我只看到:在Project_Name像{?Pm-?Proj_Name}这样的地方,我尝试在SQL的顶部声明和设置一个变量,但当我查看子报表的SQL时,仍然没有看到我在SQL中选择的参数。我做错什么了吗?声明@ProjName varchar200 set@ProjName='{?Pm-?Proj_Name}'从DB_表中选择projectname、ReleaseDate、TaskName,其中Project_Name如@ProjName和ReleaseDate>=currentDate在晶体级别上的过滤效率非常低。如果可能,最好在数据库级别进行筛选。
Select Projecttname, ReleaseDate, TaskName From DB_Table Where Project_Name like '%{?Pm-?Proj_Name}%' and ReleaseDate >= currentdate