使用 C1Report 控件 > 高级功能 > 参数查询 |
参数查询是通过显示对话框提示用户输入或选择,根据用户输入的信息执行查询,例如使用要查询的记录作为标准值或报表字段值提示用户。 参数查询可以提示用户输入一个或多个值进行数据查询,例如,用户可以输入两个日期:起始日期和截止日期, C1Report会根据用户输入的两个日期,查询满足这两个日期之间的数据记录。
可以使用参数查询功能创建月收入报表。 当加载报表时,C1Report会显示一个信息对话框,要求您选择希望查看的月份, C1Report会根据您的选择,加载相应的月收入报表。
创建参数查询,需要在RecordSource属性中编辑带参数的SQL语句。 创建参数查询的语句与Microsoft Access提供的相同。
创建参数查询的最简单的方法是在SQL语句的WHERE条件下添加一个或多个参数表达式,然后使用参数手动替换表达式的固定值。 例如,先从普通的SQL语句:
strSQL = "SELECT DISTINCTROW * FROM Employees " & _
"INNER JOIN (Orders INNER JOIN [Order Subtotals] " & _
"ON Orders.OrderID = [Order Subtotals].OrderID) " & _
"ON Employees.EmployeeID = Orders.EmployeeID " & _
"WHERE (((Orders.ShippedDate) " & _
"Between #1/1/1994# And #1/1/2001#));"
下一步是确定将要用参数替换的SQL语句中的表达式。 上述的例子中,参数替代的就是WHERE子句中日期的表示,黑体字表示的。 参数名为Beginning Date和Ending Date 。 由于这些名称中包含‘空格’字符,需要将各个参数使用方括号括起来:
strSQL = "SELECT DISTINCTROW * FROM Employees " & _
"INNER JOIN (Orders INNER JOIN [Order Subtotals] " & _
"ON Orders.OrderID = [Order Subtotals].OrderID) " & _
"ON Employees.EmployeeID = Orders.EmployeeID " & _
"WHERE (((Orders.ShippedDate) " & _
"Between [Beginning Date] And [Ending Date]));"
最后一点,参数必须在SQL语句的开始使用带有PARAMETERS的关键词声明,参数声明包括参数名称,类型和缺省值的声明:
strSQL = "PARAMETERS [Beginning Date] DateTime 1/1/1994, " & _
"[Ending Date] DateTime 1/1/2001;" & _
"SELECT DISTINCTROW * FROM Employees " & _
"INNER JOIN (Orders INNER JOIN [Order Subtotals] " & _
"ON Orders.OrderID = [Order Subtotals].OrderID) " & _
"ON Employees.EmployeeID = Orders.EmployeeID " & _
"WHERE (((Orders.ShippedDate) " & _
"Between [Beginning Date] And [Ending Date]));"
一旦执行到该语句时,C1Report将显示一个对话框,提示用户输入“开始日期(Beginning Date)“和“结束日期(Ending Date)”的值。 根据用户输入的日期值生成相应时间段的报表。
该对话框通过C1Report即时创建的。 该对话框会显示查询需要输入的所有参数,并根据参数类型选择合适的输入控件。 例如,复选框用于表示布尔类型的参数,日期时间选择器控件用于表示日期类型的参数。 如图显示了上节的SQL语句呈现的对话框:
PARAMETERS的语法是使用“逗号”分隔的参数的属性声明,使用“分号”表示参数声明结束。 每个逗号里面的内容都描述了参数的属性,包含以下信息:
- 参数名称 : 如果名称中包含空格字符,则必须使用方括号(如[起始日期])。 参数名称会显示在参数查询对话框中,也会出现在SQL语句中的WHERE语句中,在SQL语句中会被实际的用户输入替换。
- 参数类型:以下是C1Report支持的数据类型:
类型名称 | ADO类型 |
---|---|
Date | adDate |
DateTime | adDate |
Bit, Byte, Short, Long | adInteger |
Currency | adCurrency |
Single | adSingle |
Double | adDouble |
Text, String | adBSTR |
Boolean, Bool, YesNo | adBoolean |
创建参数化查询的最简单的方法是增量式的。首先使用一个简单的查询,然后在查询语句中添加参数定义语句(不要忘记输入分号结束参数定义语句)。 最后,编写WHERE子句,并在适当的地方添加参数名。
您可以使用GetRecordSource方法来获取有关参数查询的正确的SQL语句(不具有参数语句)。 如果你想使用报表的数据来创建自己的数据集,参数查询会非常有用。
注意: 如果不使用参数查询,你可以使用Visual Basic或C#语言编写代码来创建对话框,从而获得用户的输入信息,并根据需要修改SQL语句或设置 数据源 对象的 过滤器 属性。 使用参数查询的优点在于,参数查询逻辑是嵌入于报表内部的,独立于浏览器应用程序。 (同时,这也节省了编写代码的时间。) |