pb管理系统:用PB开发报表系统



=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开发环境下创建对象方式呢?

1、建立菜单(将barToolbarObject type 设为MenuCascade方式Item项为各可创建对象)

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自定义事件

4、在主窗口下自定义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源名及分类



做好如上手脚后中即可直接连接了





Tags:  pb报表打印 pb自定义报表 pb报表 pb管理系统

延伸阅读

最新评论

发表评论