教程6:数据库型报表的常规定制
前面的教程您所学习的只是电子表格型报表的定制,本教程开始我们将学习数据库型报表的定制。
什么是数据库型报表,它与电子表格型报表有何区别?
二者的区别简单地说就是数据来源不同,电子表格型报表的数据来源于您的人工输入或从EXCEL中复制粘贴,而数据库型报表的数据来源于数据库,这样的数据库有SqlServer2000/2005,ACCESS,EXCEL和ODBC数据源。
如果您的工作与数据库息息相关,您会发现管理数据库是个挺麻烦的事情,如果数据库是SqlServer,您还可以装个客户端进行远程管理;如果数据库是ACESS或EXCEL呢,您就必须得走到服务器前,打开数据库文件进行操作。特别您有一个互联网上的网站,网站后台不可能提供所有的数据库管理,您要修改某个数据库数据,就得把整个数据库下载下来,修改好后再传上去,真是太麻烦了,想想看现在您只需定制一个数据库型报表,就可以在浏览器上轻松完成这个过程,而不必等待那缓慢的FTP传送了。
如果您是一位不会编程的网站负责人,一定有这样的经历,想增加一个网站功能,就不得不去互联网上搜索相关的系统,好不容易找到一个,可能还不太适合,还得求人帮忙修改。
如果您会编程,您一定深刻地体验过,开发一个哪怕最简单的功能,比如一个后勤报修系统,都会用掉您不少的时间,因为哪怕最简单的系统也包含了数据库的增加删除和修改功能,您必须一个模块一个模块地设计,然后一行一行地编写代码。
想一想不管会不会编程,现在只需简单定制一个数据库型报表,一行代码都不用写,就可以完成这个功能,会是一件多么省心的事呀。
也许您已经迫不及待想看看如何定制数据库型报表了,让我们开始吧。
先回忆一下,在“体验足易在线EXCEL”一节中我们是怎样修改注册数据库路径的
| 1、管理登录,进入管理员界面。 2、在右侧管理菜单中,点击“注册数据库”下的“列表”(下图红圈1),管理设置区将出现已注册数据库列表,可以看到所有的注册数据库的根目录都是E:\gmex\(红圈2),点击“中国风”所在行的“修改”(红圈3),进入注册数据库修改页面。 ![]() 3、进入注册数据库修改页面后,会看到如下画面,请将ACCESS数据库文件路径的根目录改成您的您的web站点根目录(红圈1处,假设您的web站点根目录是E:\web,则改成 E:\web\onlineXLS\dataStore\FPNWIND.mdb),然后按“连接”按钮测试连接。 ![]() 如果路径正确,连接成功,将出现如下画面 ![]() 从上图可以看到根目录(红圈1处)被修改成E:\web\后,连接数据库成功,所有数据库表被列出,点击相应数据库表还可以看到表中的记录,当然您的根目录肯定不是E:\gmex\或E:\web\,请根据您的web站点根目录进行修改,最后按“保存”按钮(红圈2处)进行保存。 |
您可以打开onlineXLS\dataStore\文件夹,会发现上面三个注册数据库的数据库文件FPNWIND.mdb,northwind.mdb和scores.xls都在其中,
现在您明白为什么它们的路径要改成—— web站点根目录\onlineXLS\dataStore\数据库名 ——了吧。
这三个数据库文件是足易在线EXCEL系统提供的示例数据库,供您练习之用,当然您可以使用自己的数据库文件,这将在后面提及。
让我们先用FPNWIND.mdb练习定制您的第一个数据库型报表。
1、首先确保您已经修改了注册数据库的路径,成功连接上注册数据库"中国风"。
2、管理登录,进入管理员界面,添加报表。
3、在“选择注册数据库”下拉菜单中选择“中国风”(下图红圈1)。
4、在左侧数据表列表中选择“订单”(下图红圈2),数据表“订单”的记录将显示在右侧的报表中。
5、“属集”选择“销售”(下图红圈3)忘了怎么选择属集?请看教程1:选择属集
6、保存报表。

好了,第一个数据库型报表定制好了,让我们去用户界面看看它和电子表格型报表有何不同。
在用户界面,用user登录,展开到“销售”,点击报表“订单”,在用户报表区将如下呈现。

1、红框1处是记录导航按钮,足易在线EXCEL数据库型报表默认为每页三十条记录,报表“订单”有超过五十多条以上的记录,所以被分成两页,按“>”按钮查看下一页,按“<”按钮查看上一页,“>|”查看最后一页,“|<”查看第一页。
2、红框2处用于搜索特定范围内的记录,如搜索字段“employee”名字为“李明”的记录,如下图

如果搜索的字段为数字或日期类型,则会有两个搜索关键字,第一个代表搜索下限,第二个代表搜索上限,如要搜索销售额在10000和50000之间的记录(即销售额大于等于10000并且小于等于50000),如下

3、按下“编辑”按钮,将打开编辑区,如下

数据库型报表的编辑区和电子表格型报表一样,而且编辑方法也一样,您可以试着添加删除和修改几个记录(必须要按“编辑”按钮打开编辑区才可编辑,处于非编辑状态是无法编辑的)。
这个“订单”表还有许多待改进的地方
1、报表格式上要调整,如列宽,对齐方式,表头上色,冻结等。
2、字段名是英文的,如果能用中文名就比较友好,如“employee"字段名显示为“员工”。
3、去掉不需要的字段如“customer”。
下面我们来解决这些问题
1、管理登录,进入管理员界面。
2、进入修改“订单”页面。
3、打开“命令和选项”对话框(忘了?请看 教程3:打开“命令和选项”)
4、点击报表的A2单元格,上色(如下图红圈1),这将使表头上色;点击A3单元格(红圈2),按左下方“冻结”按钮进行窗格冻结。
5、在字段设置模块的orderID字段下,在“别名”文本框(红圈4)中输入“订单号”,请注意A2单元格由“orderID”变成“订单号”
6、将“customer”字段下的保留单选框不选(红圈5),请注意报表中“customer“字段消失。
7、调整各字段列宽到适当大小。
8、保存报表。

来到用户界面,用user登录,打开报表“订单”,您将看到如下呈现

可以通过在修改报表页面中调整列宽达到调整列宽的目的(由于兼容性问题,IE8无法调整列宽),数据库型报表的行高不可调整,对齐方式可以在“命令和选项”中设置。
报表仍有需要改进的地方,如产品类型有七种,1——机电产品,2—— 高压产品,3——建筑机械等等,能否让产品类型显示它们对应的中文类型名称而不是抽象的数字呢?可以,请跟随以下步骤
1、管理登录,进入管理员界面,进入修改“订单”页面。
2、在字段设置模块中,点击“productType”下的“值域”按钮(下图红圈1)。
3、在弹出的值域设置面板中选中“单选”(红圈2)
4、在“值”后的文本框(红圈3)中填入“1”,在“名”的文本框(红圈4)填入“机电”,按“加入”(红圈5)将第一个单选选项加入值域中。
5、重复步骤4,分别在值中填入“2”,名中填入“高压”,然后值“3”名“建机”,值“4”名“车辆”,值“5”名“电器”,值“6”名“包装”,值“7”名“办公”,在值域文本框中会形成“1**机电,2**高压,3**建机,4**车辆,5**电器,6**包装,7**办公”的值域字符串。
6、按“检测”(红圈6)检测值域字符串的合法性,如果合法,将会被自动确认。
7、保存报表。
回到用户界面,用user登录,打开“订单”,您会发现“产品类型”现在用友好的中文显示,如下

而这些友好的中文名称正在是在值域设置中输入的“名”值。
打开编辑区(点击右下方的“编辑”按钮),您会发现“产品类型”字段下的数据又变成了数字(下图红框1),这是因为处于编辑状态下必须呈现数据库中的真实数据。

点击“产品类型”下的任一单元格,如D4,在编辑区会出现在上图红框2式的下拉菜单,下拉菜单中的选项正是我们在值域设置中输入的选项。试着往D4输入7,可以输入,再试着输入8,会弹出提示告诉您“输入的数据不在值域内”,您的输入被拒绝。
可见,通过值域设置,可以达到两个目的,一是友好显示,二是限制输入范围。
请做一个小练习,销售类型有两种,1——代理产品,2——自主产品,请试着用值域设置友好显示并限制输入范围。
如果您好只是想限制输入法范围内而并不想进行友好显示,您好可以只输入“值”部分,而“名”部分留空。
如果您想限制输入的是一个区间如大于等于1小于等于10,而不是1到10的10个选项,那么请设置“区间”值域,以下举例说明。
比如在您好要限制“销售额”的输入范围为大于等于0(销售额不可能是负数),小于等于1000。
1、管理登录,进入“订单”修改页面。
2、打开“销售额”的值域设置面板(按“sales”下的“值域”按钮,下图红圈1)
3、选“区间”(下图红圈2)
4、在逻辑运算符下拉菜单中选择“>=”(红圈3),在数值文本框中填入“0”(红圈4),按“加入”(红圈5)
5、在逻辑运算符下拉菜单中选择“and”(红圈3),按“加入”(红圈5)
6、在逻辑运算符下拉菜单中选择“<=”(红圈3),在数值文本框中填入“1000”(红圈4),按“加入”(红圈5)
7、值域文本框会呈现如“$$<=0 and $$>=1000”的值域字符串,$$代表字段名,这里是sales,如果熟悉ASP编程或SQL查询语句,就会明白字符串的意思就是sales大于等于0并且小于等于1000。
8、按“检测”,让系统检测值域字符串合法性。
9、保存报表。
现在回到用户界面,打开“订单”,按“编辑”按钮打开编辑区,点击“销售额”下的单元格,试着输入100、-1、 1001三个数字,看看会发生什么。(必须要按“编辑”按钮打开编辑区才可编辑,处于非编辑状态是无法编辑的)
您会发现输入100没问题,输入-1和1001时得到超出值域警告。
在字段设置模块下部,还有两个设置模块,一个是“字段筛选”,一个是“字段排序”
一、字段筛选,用于筛选所需记录,例如您只想列出1997年的记录,请试着做如下操作
1、管理登录,进入“订单”修改页面。
2、按“字段筛选”模块中的“设置”按钮(下图红圈1),打开“字段筛选”面板。
3、在字段下拉菜单中选择“orderDate”(下图红圈2)
4 、在逻辑运算符下拉菜单中选择“>”(红圈3),在数值文本框中填入“1996-12-31”(红圈4),按“加入”(红圈5),系统会自动给日期前后加上“#”,因为这是一个ACESS数据库日期类型,ACESS数据库日期类型需用“#”引住。
5、在逻辑运算符下拉菜单中选择“and”(红圈3),按“加入”(红圈5)。
6、在逻辑运算符下拉菜单中选择“<”(红圈3),在数值文本框中填入“1998-1-1”(红圈4),按“加入”(红圈5)。
7、在字段设置文本框中会形成“orderDate>#1996-12-31# and orderDate<#1998-1-1#”的筛选字符串,意思是订货日期大于1996年12月31日并且小于1998年1月1日,这就是1997年的时间范围。
8、按“检测”,让系统检测值域字符串合法性。
9、保存报表。
现在回到用户界面,打开“订单”,您会发现只有1997年的数据出现在报表上。
系统变量~username~
如果要定制这样的报表——让登录者只能看到自己的记录,却看不到别人的记录,该怎么定制呢?比如说“订单”中,李明登录后,只能看到“李明”的订单记录,却看不到别人的订单记录,该怎么做呢?
当然可以对“employee”字段用employee='李明'进行筛选,然后把报表权限设为只有“李明”可读。但张强呢?再定制一个报表,用employee='张强'进行筛选,然后把报表权限设为只有“张强”可读。可是公司里有多少员工就得定制多少个报表,岂不太麻烦,能否用一个报表解决?用系统变量~username~可以解决此问题。
系统变量~username~代表登录的用户,如果登录的用户是“李明”,系统变量~username~就等于“李明”,如果登录的用户是“张强”,系统变量~username~就等于“张强”,做如下试验,对“订单”设置筛选,筛选字段选“employee”,筛选关键字填入~username~,如下图(因为字段employee的数据类型是文本,~username~会被单引号引住)。
按“检测”按钮,保存报表。分别用“李明”和“张强”登录,看看报表内容有何不同。
二、字段排序
报表中的记录默认是按orderID递增排序的,也就是orderID最小的排最上,最大的排最后,如果不想按照orderID排序而是按员工名排序,那么请按如下步骤操作
1、管理登录,进入“订单”修改页面。
2、在字段排序模块的左侧字段列表中选择“employee”(下图红圈1)
3、按“添加”按钮(红圈2)将“employee”加入排序列表,注意字段在排序列表中显示为“+employee”,字段名前面的“+”表明按递增排序,如果想按递减排序,请在添加前点选“-”单选框(红圈3)。
4、如果想从排序列表中去掉某个字段,在排序列表中选中这个字段,按“删除”按钮(红圈4)
5、保存报表。
回到用户界面,打开“订单”,您会发现现在报表是按员工姓名排序的。
您一定会问, 值域设置面板中的“多选”单选框、“保留”后的“独一”复选框,还有左上方的行权限有什么用,这些我们将在下一个教程——数据库型报表的sql定制——进行阐述。