欢迎测试 带SQL脚本解析,自动报表(不需做模板),强大交叉表功能的查询报表工具(50分)

  • 主题发起人 主题发起人 richnese
  • 开始时间 开始时间
R

richnese

Unregistered / Unconfirmed
GUEST, unregistred user!
功能:
1. 构建统一的报表查询框架,傻瓜式操作,从些报表再无烦恼.
2. 扩展功能时只需发布相应脚本和字典,无须重新发布应用程序。
3. 自动解析SQL参数,为用户提供统一个统一的参数输入区,并能自动记忆统计开始时间和结束时间。
4. 顶级交叉表报表功能,一切随心所欲,只要你能想到就能做到!详见示例
5. 全自动的报表生成功能,你只需按一个键(F8)就一切搞定,版式(横排竖排),字体全部搞定.
6. 可应付各型复杂的报表,你可为每个报表建一对应的FR模板,利用fastreport设计各型报表,并可在其中插入自定义的系统变量,如单位名称,统计开始时间,统计结束时间等
7. 无限参数支持,并可自动过滤重复参数
8. 内置多种参数输入风格(esDate,esString,esCombobox,esNumber,esCheckbox,esStringList),
9. 自适应整个网格宽度,根据窗体大小自动调整各列宽度
10. 可导出为XLS,设置网格属性,在网格上点右键,会发现更多的高级功能.
11. 交叉表仅对SQL Servere 有效
查询器语法说明:
注:以下所有语法均不区分大小写
1、基本查询语法
Select Field1,Field2, {<条件序号|提示|显示风格|默认值|附加>}… from 表名 where {<条件序号|提示|显示风格|默认值|附加>} and/or/not {<条件序号|提示|显示风格|默认值>} …+ group by…
表达式说明:
1) 表达式可出现在SQL中的任意位置,包括字段位置
2) 条件序号和显示风格不能为空,其余项可为空,但必须用’|’分隔
3) {、<后与紧接的字符之间不能留空格,同理}、>与前面的字符之间不能有空格。
4) 条件序号为整数1,2,3,..如两条件相同,则应完全相同,包括序号
5) 提示为显示在参数输入框前的文本,可为任意字符。
6) 显示风格为参数输入框的风格,基本类型为:时间,字符串,数字,…用户可自行修改dict.dat,以扩展风格默认值分两类,时间型的默认值规则:
时间宏+固定部分
示例:[today]12:00:00;
[weekday]15:00:00
时间宏有如下几种:[today][yesterday][weekday][monthday],其它只有固定部分
示例:select top 10 * from 视图_门诊明细 where 挂号时间>={<1|挂号时间开始|时间|[weekday]12:00:00|B>} and {<3|药房名称|药房||>}
and 挂号时间<={<2|挂号时间结束|时间|[today]12:00:00|E>}
7) 附加可以如下值:B、E、或其它合法字符
B:此项为统计开始时间
E:此项为统计结束时间
其它非空值:如科室、药房、操作员等,为报表提供相应项的值,即替换报表中对应的变量。
注 附加项的作用 1、B、E项为统计时间提供依据,在所有报表中,只需一次设置开始和结束时间,下一报表中只要包含有开始和结束时间会被自动设置。2、同时B、E为报表提供中引用科室和开始结束时间提供参考。3、如附加项为其它字符串,报表中相应变量会被自动替换。
n 整个表达式应用{ 和 } 包含,如输入的值为空(只为esCombobox风格提供),则整个表达式将被替换为空串,如下示例:
select top 10 * from 视图_门诊明细 { where 药房ID= <1|药房名称|药房||>}
当在药房列表中未选择药房,即所有药房时,整个{}之间的内容将被替换为空串 ,如果选择了科室,将被替换为: select top 10 * from 视图_门诊明细 where 药房ID= 2,即只替换<>的内容为选择的科室ID。
利用该功能可制作更复杂的查询如:
select top 10 * from 视图_门诊明细 where 1=1 { and 药房ID= <1|药房名称|药房||>} { and 科室ID= <2|科室名称列表|科室||>}

2、交叉表查询语法:
Cross 要查询的表(/视图)名称 groupby 分组字段名(行) Case 搜索字段名(列) sum 合计字段名 where 条件表达式…
示例:
cross 视图_门诊明细 groupby 收费 case 大类别 sum 金额 where 挂号时间>={<1|挂号时间开始|时间|[monthday]12:00:01|B>} and 挂号时间<={<2|挂号时间结束|时间|[Today]12:00:01|E>}
Cross,GroupBy,Case,Sum为关键字,不区分大小写,其后分别接 表名,分组字段,搜索字段,合计字段,中间用空格隔开,空格长度不限。建议:为增强阅读性,可先生成视图并将各字段转化为中文。
其中行,列,合计字段名均可用条件表达式.
条件表达式语法同基本查询。
Case 项可连接字符型、数值型、布尔型、日期型及任何合法的表达式,以构成更复杂的交叉表查询,如下例:
cross 视图_门诊明细 groupby 收费人 case month(挂号时间) sum 金额 where 挂号时间>={<1|挂号时间开始|时间|2000-1-1 00:00:00|B>} and 挂号时间<={<2|挂号时间结束|时间|2002-1-1 00:00:00|E>} 查询结果:按收费人以月份汇总2001-1-1 至 2002-1-1的收费金额
cross 视图_门诊明细 groupby left(收费人,2) case 挂号科室 sum 金额 where 挂号时间>={<1|挂号时间开始|时间|2000-1-1 00:00:00|B>} and 挂号时间<={<2|挂号时间结束|时间|2002-1-1 00:00:00|E>} 查询结果:按收费人姓氏以科室汇总2001-1-1 至 2002-1-1的收费金额
cross view_sales groupby {<1|请选择行|销售分组|书名|分组>} case {<2|请选择列|销售搜索|按月份|搜索>} sum {<3|请选择合计|销售合计|金额|合计>} where 销售时间>={<4|销售时间开始|时间|1993-01-01 17:00:00|B>} and 销售时间<={<5|销售时间结束|时间|1995-10-10 17:00:00|E>}
3、查询报表器使用
双击PageControl相应页该页会调整为最大化,如是网格,将自动重置所有列宽
在设置中如设置'模板存在时使用模板',将优先使用查询库目录下同查询同名的FRF模板,如没有再自动生成.强烈建议对交叉表不使用模板!
对于自动生成的报表,不要试图去设计报表,否则再报表时会死机
传输到EXCEL中时应先选中要传输的单元格,可拖动选择.
在使用交叉表查询时应确保字符合法,否则会出错
该版本仅供测试,如发现BUG,烦请联系作者,谢谢合作
本示例使用了SQL server中的pubs数据库,启动时会自动建一个视图,SQL包含在view.sql中
真诚感谢版主为该软件的发布提供空间!
http://bbs.2ccc.com/uploads/richnese/report.rar
作者:周俊 2003-11-05 成都
Email: richnese@163.com
QQ:182473222
 
拜托:
bde的连接 动态 写
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
666
import
I
I
回复
0
查看
680
import
I
后退
顶部