=Arial12b>用PB开发WEB下报表系统
作者:流方 主页:http://liulee.myrice.com
在建设某公司内部信息网过程中涉及到大量DBF文件直接转换为HTML文件应用其他文件格式(Excel,Access,以及大型数据库查询)也有这方面要求由此用PB实现了基于ODBC查询PSR文件生成工具 此生成器原理是: 1、通过取出表结构 2、生成查询SQL语法 3、SyntaxFromSQL生成datawindow语法 4、create生成数据窗 5、将生成数据窗进行修饰包括增加对象、删除对象、修饰对象、布置对象等操作进行数据窗美化工作 6、将生成数据窗用SaveAs另寸为 PSR 文件 7、在HTML页中使用插件方式或直接连接方式显示该PSR文件 在实现过程中使用了数据窗Mody各种语法来实现对数据窗修饰如加入线条加入文本、改变格式、颜色等可修饰内容如下图:
\" width=457 tppabs=\"http://go.163.com/~liulee/images/autopsr.g\">
该工具主要有以下特点:
1、自动化
对某些部门而言需要处理数据是动态变化如某销售公司每天处理十几报表报表形式基本稳定因此只需将更新后数据拷贝到指定位置或在形成SQL语法时加入定条件即可实现自动化报表处理处理时将需要报表循环自动设置ODBC连接参数(用写注册表思路方法)自动连接好数据库打开报表对应数据窗检索记录然后另存为预定PSR文件即可
2、实用性
该工具特别针对查询而设计可扩展到任何用ODBC连接数据源只要该数据源支持标准SQL查询即可特别对于OA中或信息发布中需要将些沿用已久FOX系统下DBF文件发布而言所做工作只要在次定义后按几个按钮即可完成 特别是在NOTES中只要将 PSR 文件作为附件直接插入到文档中在客户端定义好Plugin,即可实现 WEB 发布
【技术要点参考】
1、创建数据窗子对象
通过数据窗Mody实现语法:
dw_report.mody(\'create text(name=uc_text_001 x=\"10\" y=\"20\" width=\"300\" ....\')
通过对具体对象( text,picture,rectangle,line,compute等)属性赋值(注意括号使用和匹配)如x,y,width,height,color,font,background.color,background.mode,expression,format等即可实现对象创建创建对象时特别注意是加入 moveable=1 resizeable=1 语法实际上是将对象设为可移动可变大小这对于对象调整是比较重要
删除对象只需用如下语法:
dw_report.mody(\'destroy uc_text_001\')
如何实现象PB开发环境下创建对象方式呢?
2、各菜单ItemClicked Event中写入:
parent.toolbarItemdown = false // 使该ToolbarItem处于压下状态
mf_createobject(\'STOP\')
统mf_create_object([对象类别]),[对象类别]可自定以好如\"text\",\"line\"等
3、mf_create_object如下(argument 为 object_)
window lw_sheet
lw_sheet = parentwindow.GetActiveSheet
IsValid (lw_sheet) then
lw_sheet.triggerevent(\'ue_createobject\',0,obj_)
end
该取得当前打开sheet窗口lw_sheet,然后该窗口下ue_createobject自定义事件
PassedString
PassedString = String(Message.LongParm, \"address\") // 取出创建类型
isnull(passed) or passed = \'STOP\' then
m_.m_objects.toolbaritemdown = false
ib_creatingObject = false
end
ib_creatingobject = True // 等待dw_reportclick事件来触发
is_object = passed // 告知当前触发对象
5、在dw_reportclicked事件中写入以下语法:
NOT ib_creating_object then // instance 变量记录是否处于创建状态
m_.m_objects.toolbarItemdown = false // 恢复ToolbarItem状态
isnull(is_object) then // 意外判断
ib_creatingobject = false // 停止创建
choose is_object
……
[具体创建语法]
2、选择对象
产生Windows风格选择形式主要包括:单选CTRL+单选框选
单选:容易实现在datawindowClicked事件中用GetObjectAtPoer即可取得点取对象然后在该对象 4周画rectangle标记即可(清除其他已选对象选中标记);
多选:在Clicked事件中判断是否有CTRL按下
KeyDown(keycontrol!) then …
增加选中对象列表()
显示选中标记
框选:需要由3个事件协同工作
Clicked: (鼠标单击)
记录左键按下时位置(pixels),同时考虑Scrollhorizontal事件产生位移量(unit)
ib_rect_select = True // 框选开始
ii_mousex = unitstopixels(ii_hscroll_off,xunitstopixels!) + xpos
ii_mousey = unitstopixels(ii_vscroll_off,yunitstopixels!) + ypos
ue_mousemove: (自定义事件Evend ID = pbm_dwnmousemove)(鼠标移动)
// 动态创建框选矩形框
NOT ib_rectselect then
li_height,li_width,x2,y2,x1,y1
x1 = ii_mousex
y1 = ii_mousey
x2 = unitstopixels(ii_hscroll,xunitstopixels!) + xpos
y2 = unitstopixels(ii_vscroll,yunitstopixels!) + ypos
li_height = y2 - y1
li_width = x2 - x1
x1 = pixelstounits(x1,xpixelstounits!)
y1 = pixelstounits(y1,ypixelstounits!)
hh = pixelstounits(hh,ypixelstounits!)
ww = pixelstounits(ww,xpixelstounits!)
ls_m
ls_m =\' create rectangle(band=foreground name=uc_rect_select x=\"\'+(x1)+&
\'\" y=\"\'+(y1)+ \'\" width=\"\'+(ww)+\'\" height=\"\'+(hh)+\'\" \'+&
\'brush.hatch=\"7\" brush.color=\"553648127\" pen.style=\"2\" pen.width=\"5\" \'+&
\'pen.color=\"1090519039\" background.mode=\"2\" background.color=\"255\" )\'
dw_pre.redraw(false)
dw_pre.mody(\'destroy uc_rect_select\') // 先删除旧矩形框
dw_pre.mody(ls_m) // 再创建新矩形框
dw_pre.redraw(true)
ue_leftbuttonup: (自定义事件Evend ID = pbm_lbuttonup) 鼠标左键抬起
//鼠标左键抬起如果处于ib_rectselect状态则结束选择状态
NOT ib_rectselect then
dw_pre.redraw(false)
dw_pre.mody(\'destroy uc_rect_select\')
dw_pre.redraw(true)
ib_rectselect = false
…… // 处理选择对象
通过以上 3个事件协同工作就可实现多对象框选
3、自动连接ODBC
自动连接ODBC是指不需要用户自己定义ODBC连接参数通过自动实现连接方面简化了用户操作另方面使批量定制报表成为可能
自动连接ODBC实现是通过写注册表来实现主要用到有两个:
Registry
Registryget
通过Registry改写注册表主键及相关键值:
HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\[ODBC源名称]
HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\ODBC Data Sources
[ODBC源名称] 即要创建或修改ODBC source,如
HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\system
该主键下有若干键值记录了该连接参数如Sybase SQL anyway 5.0 典型设置:
值
含义
Autostop
Yes
结束后自动终止连接
DatabaseFile
C:\\Program Files\\DBF自动报表\\system.DB
数据库文件
DatabaseName
system
连接名称
Description
自动生成ODBC
描述
Driver
C:\\Program Files\\DBF自动报表\\WOD50T.DLL
驱动语法解释
PWS
SQL
用户口令
Start
C:\\Program Files\\DBF自动报表\\dbeng50 -c8192
驱动及参数 -c8192表示用8192K内存做cache
UID
DBA
数据库用户名
为使其他可用该ODBC源在主键:
HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\ODBC Data Sources
下加入相应键值:
值
含义
system
Sybase SQL Anywhere 5.0
ODBC源名及分类
做好如上手脚后在中即可直接连接了
最新评论