在我的文章 使用eclipse在jsp上显示水晶报表(三)用sql语句过滤数据 中, 我写到 "在.net中,你可以很容易的用sql语句过滤报表数据,但在CR4E中没这样的功能设定,但可以通过编写代码完成。" 其实在eclipse 中也是可以做到的, 只是我学艺不精, 没注意到而已.
经过这几天的测试, 我发现添加到报表的 sql 命令对象是完全脱离了数据库的一个数据集, 这个数据集的内容在添加到报表中的时候已经确定了.
如果在连接到数据库的情况下, 点击页面工具栏里面 “刷新”按钮, 将可以同步到数据库的数据, 但是要注意防止用户恶意刷新.
二. CR4E2
IDE: eclipse 3.4, 数据库: SQL Server 2005
直接使用sql 命令对象的关键是 "*.sql" 文件, 在该文件的 右键菜单 中, 我们可以看到 "Craystal Reports", 点击进去可以看到 "Add To New Report(添加到新报表)" 和 "Add To Current Report(添加到现有报表)" 的菜单选项. 从这两个菜单选项的名称来看, 我们大概也能猜到他们的作用了吧.
没错, 你在 sql 文件中编写的sql 语句, 只要通过运行, 就可以 sql 的结果集添加到当前报表或新的报表中, 成为他们的一个数据源.
⑴ 建立 sql 文件
建立 sql 文件有两种方法.
1. 通过菜单"file" -> "new" -> "other", 弹出窗口, 选择 "SQL Development" -> "SQL File"
2. 通过 “Data Source Explorer”, 点击上面红框圈中的地方.
⑵ 在 mysql.sql 文件里面写sql, 注意要先连接上数据库才能进行操作.
⑶ mysql.sql 的右键菜单
圈红圈的就是重点了. 点击 “Execute All”, 执行sql, 执行的结果在 “SQL Results” 中显示
“SQL Results”界面比以前的简洁多了. 只有成功执行的sql 的结果集才能添加到报表中. 每次添加sql 结果集到报表前, 都需要执行.
点击 "Edit in SQL Query Builder", 弹出窗口, 这个只是让你进行组合sql 语句的工具, 感觉跟 Sql Server 2000的 "企业管理器" 建立视图的工具很像.
"Edit in SQL Query Builder" 执行成功的 sql, 还是要拷贝到 mysql.sql 里面执行成功后才能添加到报表中的.
⑷ 把sql 添加到报表中
sql 执行成功后, 点击 “Add To Current Report”, 跟 sqlpage 不同, 这次是弹出一个窗口:
比以前的做法人性化很多呢. 选中rpt 文件, 点击 "OK", 结果如下:
“mysql”是默认取 sql 文件的名称, 你可以改成其他的名称的, AddressId 是select 的字段. 你可以把 AddressID 字段添加到报表里面了. 这个时候数据源mysql 其实跟 mysql.sql 是无关的了, 你可以重复 2-4 的步骤, 把其他的sql 语句添加到报表中.
⑸ 结果:
CR4E1 的