作为应用程序的一个很大组成部分,报表其实很少以单独形式存在,因此我们需要将报表作为模板应用到程序中。前面的几篇随笔简单介绍了报表的基本制作和样式控制等。其中的查询内容信息直接放在报表中。通过Query Builder生成的query可以通过Query Builder的Advanced模式进行查看。如图1.
图 1
下面笔者通过一个示例,更改报表中的查询数据来动态显示不同的结果。使用者可以通过不同的用户名登录信息,查看当前登录的艺术家的作品信息。
首先新建一个简单的登录窗体,代码如下。
<h3>Artist Login Form</h3>
<p>Please enter your last name and password.</p>
<cfform name="loginform" action="artSalesReport.cfm" method="post">
<table>
<tr>
<td>Last Name: </td>
<td>
<cfinput type="text" name="username"
required="true" message="A username is required. ">
</td>
</tr>
<tr>
<td>Password: </td>
<td>
<cfinput type="password" name="password"
required="true" message="A password is required. ">
</td>
</tr>
</table>
<br/>
<cfinput type="submit" name="submit" value="Submit">
</cfform>
然后新建一个应用页面,注意这里主要新建了一个查询变量,并将这个变量赋给cfreport标签的query属性,而将原来的报表文件赋给template属性,查看格式为HTML, 代码如下。
<cfquery name="artsales" datasource="cfartgallery">
SELECT
*
FROM
APP.ART,
APP.ARTISTS
WHERE
APP.ART.ARTISTID = APP.ARTISTS.ARTISTID
AND
APP.ARTISTS.LASTNAME = <cfqueryparam value="#FORM.username#">
ORDER BY
APP.ARTISTS.LASTNAME
</cfquery>
<cfreport query="artsales" template="ArtSalesReport1.cfr" format="HTML">
在浏览器中运行程序,效果如图2, 图3.
图 2
图 3
这里值得注意的是新建的查询中必须全部包括报表中的字段,当然可以增加新的字段。