pb快速开发框架
[注*]:源代码的最后的更新有可能此文档中没有介绍。
[注**]:本框架适合PB初学者迅速提高功力,1个月就能达到1年的功力。 [注***]:PB8以上的版本都适用。 /////////////////////////////////////////////////////////////////////////// // PB8 + SQL Server 程序开发框架 // 例程 : http://sites.google.com/site/oands2/Home // 原创 : Susue苏福强 QQ:396003903 // Susue : susue@21cn.com // : susuenet@hotmail.com
// 日期 : 2006-04-22 /////////////////////////////////////////////////////////////////////////// 0 框架的概述 1 物理文件说明 2 数据库表,字段的命名 3 PB对象的命名 4 编程框架对象的说明 5 有关系统表 6 例程试用下载 ======================================================================================== 0 框架的概述 ======================================================================================== 本框架是本人在开发过程中不断积累而成。本框架的特点是简单,实用,功能齐全。程序的开发过程中只需要关心用户需求,商业逻辑,数据库的设计,有关技术及基础代码的编写本框架基本能够解决。程序的开发进度能提高50%。主要功能简述如下: 0.1版本控制
升级文件上传至数据库,版本一般从1000开始,升级一次加1。本程序只在数据库中保留最新版本。 0.2系统的自动升级 升级客户端程序,升级时只升级比当前版本高的文档。 0.3 功能权限,数据权限的设置 (注:此操作只有超级用户9999才能操作) 中间的窗口选择,维护操作员;右边为当前操作员未授权的项目,左边为授权的操作项目,其中红色框的部分可设置数据权限,(没有数据权限只能浏览数据,不能增加,删除,更新数据) 0.4 操作日志,记录每个操作员的每一部操作 (注:此操作只有超级用户9999才能操作) 双击当前行可显示完整的 sql 语句 0.5 用户可动态设置菜单名称,编号 (注:此操作只有超级用户9999才能操作) 0.6 数据字典 (注:此操作只有超级用户9999才能操作,注释保存在pb的系统表pbcattbl和pbcatcol,在pb中设计datawindow时会引用这些中文注释。) 0.7 注册授权信息 (注:此操作只有超级用户9999才能操作) 0.8 查询分析器,用sql 操作数据 (注:此操作只有超级用户9999才能操作) 0.9 流水单号的设置,用户可以设置流水单号的格式 0.10 清空测试数据,清空测试用的数据,清空数据的SQL语句可以自己维护,文件名为DELETE_.sql,每个语句用go结束。 0.11 数据备份,如果你有足够的权限,数据库备份也会拷贝到本地机一份。 0.12系统登录,自动记忆最后登录的用户编号 0.13修改口令 0.14 系统主操作界面 其中图表显示的内容为本系统用户,最关心的信息,如果是销售系统,用户最关心的可能是月的销售台量,金额等,对于服务系统可能是故障次数,服务费用等。鼠标移动到数据柱上可显示数据的准确数值。 0.15 系统菜单
0.16 根据不同操作员的功能权限生成动态菜单 不同操作权限的操作员动态菜单时不同的。动态菜单和导航系统可完成同样的操作。 0.17 操作员在线的情况,既谁在使用本系统 (图见0.13系统主操作界面) 0.18 数据的输入,主细目输入, 0.19 单个DataWindow输入, 其中的查询按钮可对当前datawindow 的内容进行查询筛选。点击列头可排序。 0.20 分类输入 0.21 2个DataWindow的单据输入,对应两个表 任何输入窗口都从0.17,0.18,0.19,0.20继承,如果数据的输入没有特殊的处理,直接用0.17,0.18,0.19,0.20输入即可。 另外0.20 输入窗口还具有查询的功能,通过主键查询。 * 注:点钮[1],[2]就变成查询条件输入模式,输入查询条件后再点[1]即可;如果更复杂的查询可以在[1]上点右键,打开[3]输入复杂的查询条件。 ** 注:其他窗口的查询与[* 注]类似。 *** 注:对于下拉数据窗口输入列,支持增量查询输入,也可以双击此列用索引目录输入。 0.22 系统暂离,封锁 系统封锁后,不能进行任何的系统操作,也不能推出本系统。 0.23 数据的查询,时点查询, 其中的查询日期[1]为查询的时点,[2]从数据库中取数据,查询按钮[3]可对数据进一步筛选。 0.24 数据的查询,时间段查询 其中的查询日期[1]为查询的时段。 0.25 报表显示格式1 ,时点报表 0.26 报表显示格式2 ,时段报表 注:报表和查询使用的是同一窗口对象w_query1,w_query2 0.27 任何的DataWindow的数据都可所见所得导出及转储 实际上保存的是tab分割的纯文本文件,只是文件的扩展名为*.xls 0.28 打印机选择 0.29 数据库连接口令连接成功后及对口令进行简单的加密 0.30 查询模式,可对数据进行综合条件查询 0.31 任何DataWindow都可进行点列头排序,注:列头的命名为:列名_t 0.32 关于系统 ======================================================================================== 1 物理文件说明 ======================================================================================== 1.0 Readme.txt 文件本身 1.1 TOOBUSY.JPG 图片文件 1.2 KEY.JPG 图片文件 1.3 GLOBE.GIF 图片文件 1.4 WAITING.JPG 图片文件 1.5 App.pbr EXE文件使用的资源文件 1.6 Main.pbr 代码库Main.pbl使用的资源文件 1.7 Pub.pbr 代码库Pub.pbl使用的资源文件 1.8 DBC.INI 系统连接数据的参数设置 1.9 dtf.exe 从服务器数据库下载升级文件 1.10 ftd.exe 升级文件上传至服务器数据库 1.11 main.pbl 主代码库 1.12 pub.pbl 公用代码库 1.13 set.pbl 操作权限设置代码库,超级用户操作的对象 1.14 System.Sql 创建系统表的sql语句 1.15 pb8frame.doc 本框架的图文说明版 另:
sql server 直连必须的库文件 dbnetlib.dll dbnmpntw.dll ntwdblib.dll pb8 必须的库文件 libjcc.dll pbdwe80.dll pbmss80.dll pbvm80.dll 物理文件(不含库文件)的大小为1.36M,压缩后为578K。
======================================================================================= 2 数据库表,字段的命名 ======================================================================================= 2.1 数据库的命名 XXXDB 如 ST3DB :山推3分厂数据库 2.2 表的命名 //以下的XXXX为任意的字符或数字,一般用英文原意或汉语声母表示 S_XXXX 系统表,一般用户不能操作,由开发者使用,如 S_LOG :系统操作日志表 A_XXXX 系统辅助表,系统能使用的可选项的设置,一般系统初始时一次性设置好,系统运行时修改的可能性很小,如 A_GZDM :故障代码表 B_XXXX 基础信息表,系统使用的一些公共数据,随者系统的运行需要增加一些数据,如 B_PART :配件目录表 XX_xxxx 系统主要数据信息表,用户最关心,随时间的推移数据不断增加的数据,XX:表示系统的功能模块,xxxx:表示具体的表名。如XS_HT:销售管理的合同外框(及合同的公共信息)XS_HTS:销售管理的合同内框(及合同的明细信息) //注:同类信息的表使用相同的前缀,如XS_ :销售数据,XS_HT :合同相关的数据
//另:最好在数据库中建一说明性质的表S_LIST,用来说明各个表的数据内容及表之间的关系 2.3 表键的命名 PK_TableName 主键, FK_TableName_Column_TableName 外键 2.4 字段的命名 //每一个表最好都要设置聚镞索引的主键 P_XX 一个表的主键 F_XX 表的外键 PF_XX 即是主键,又是外键 P_NO 如果一个表为复合主键,表示序号 #_XXXX 普通的数据字段,#为数据类型的简称,S:字符型,N:整数或数值型,B:布尔型等等。 2.5 数据类型的使用 //基本原则,考虑到数据类型的兼容性,操作的方便性,尽量使用最少的数据类型,尽管数据库提供了丰富的数据类型,我们还是要少用。 INTEGER 用来表示数量,序号等 VARCHAR 使用任何不进行算术计算的数据,包括日期,时间 DECIMAL,NUMERIC 金额,单价 IMAGE 二进制数据 BIT 布尔型 //对于一般数据以上5种数据类型应该足够 =======================================================================================
3 PB对象的命名 ======================================================================================= 3.1 PBL文件的命名 Main.pbl 程序的入口,程序的主界面用到的对象 Pub.pbl 程序的公用对象 Set.pbl 超级用户才可操作的对象 XX_xxxx.pbl 处理商业逻辑的对象,如XS_input :销售数据输入有关的对象 //每个pbl文件大小尽量控制在2M以内 3.2 窗口对象的命名 W_XXXX W_窗口为前缀,XXXX为窗口名,窗口每继承一次名称增加一个_,如W_XXXX_xxxx 表示此窗口由窗口W_XXXX继承而来 3.3 数据窗体的命名 d_#### d_为DataWindow的前缀,####为4个数字,及为操作菜单的编号,d_####x为和d_####相关的DataWindow 3.4 其它对象 stru_xxxx 结构体的命名 gf_xxxx 全局函数的命名 uo_xxxx 用户对象 3.5 PB控件的命名 按pb默认的命名即可,数据窗口控件 ========================================================================================
4 编程框架对象的说明 ======================================================================================== 4.1 main.pbl 系统MDI显示用到的所有对象 4.1.1 main 程序入口 Generated Application Object
4.1.2 d_online 当前正在连接系统的用户 4.1.3 d_yes 操作员已授权的功能 4.1.4 gf_addmenuitem 增加菜单 4.1.5 gf_jjm 简单的加密解密 4.1.6 gf_maxwindow 窗口自动适应屏幕分辨率 4.1.7 gf_online 在线检测 4.1.8 m_main 系统固定菜单 4.1.9 m_template临时动态菜单 4.1.10 pro_oands 编译发布工程 4.1.11 stru_info 打开窗口参数结构体 4.1.12 w_error 出错处理 4.1.13 w_info 系统导航 4.1.14 w_main MDI主窗口 4.1.15 w_pass 登陆口令验证 4.1.16 w_start 系统等待,正在处理中 4.2 pub.pbl 系统公用对象
4.2.1 d_dwcol 数据窗口列描述,用于通用查询
4.2.2 d_header17 横A4文件头,复合datawindow 4.2.3 d_header27 竖A4文件头,复合datawindow 4.2.4 d_query 查询条件datawindow 4.2.5 gf_add_where datawindow增加 where 子句 4.2.6 gf_chinese 切换到中文输入法 4.2.7 gf_columnsort 点datawindow的列头排序 4.2.8 gf_datetime 取服务器日期时间并转换为字符型 4.2.9 gf_english 切换为英文输入法 4.2.10 gf_jedx 金额大写 4.2.11 gf_maxid 产生一个流水单号 4.2.12 gf_maxtaborder 取datawindow的Taborder最大值 4.2.13 gf_mdays 给定日期所在月份的天数 4.2.14 gf_mintaborder 取datawindow的Taborder最小值 4.2.15 gf_set_query 通用查询主函数 4.2.16 gf_sundays 给定日期所在月份有几个星期天 4.2.17 gf_sysdate 取服务器的日期并转换为字符型 4.2.18 gf_zoom datawindow的显示比例 4.2.19 uo_st 静态文本祖先 4.2.20 uo_st_addevent 拖拽控件祖先 4.2.21 uo_st_horizontal 水平拖动控件 4.2.22 uo_st_vertical 垂直拖动控件 4.2.23 w_input_ 数据输入统一格式(1表主细目操作)输入窗口的祖先 4.2.24 w_input1_ 数据输入统一格式(1表操作)输入窗口的祖先 4.2.25 w_input2_ 数据输入统一格式(2表操作)输入窗口的祖先 4.2.26 w_input3_ 数据输入统一格式(2表操作)输入窗口的祖先,处理单据的输入 4.2.27 w_inputt_ 数据输入统一格式(1表操作),Treeview + Datawindow 4.2.28 w_inputt2_ 数据输入统一格式(1表操作),Treeview(数据来自另一个表) + Datawindow 4.2.29 w_master 小窗口的祖先 4.2.30 w_query 通用查询 4.2.31 w_query1 数据浏览条件为截至日期(所有查询报表的祖先) 4.2.32 w_query2 数据浏览条件为起止日期(所有查询报表的祖先) 4.2.33 w_select_tree dddw索引目录选择窗口 4.3 set.pbl 系统设置与维护,一般有超级用户的权限才可操作
4.3.1 d_info 系统菜单名称修改
4.3.2 d_log 操作日志 4.3.3 d_lsh 流水单号格式设置 4.3.4 d_no 未授权的操作项目 4.3.5 d_reg 注册信息 4.3.6 d_user 操作员 4.3.7 d_ut 用户表的中文注释,数据字典 4.3.8 d_ut_p 数据字典打印 4.3.9 d_ut_uc 用户表的数据列中文注释 4.3.10 gf_en_de 加密解密 4.3.11 gf_log 插入操作日志 4.3.12 gf_setupdate 设置数据权限 4.3.13 gf_str2num 字符串转换为加密数字 4.3.14 w_about 关于系统 4.3.15 w_dbbak 数据库备份 4.3.16 w_delete 删除测试用动态数据 4.3.17 w_lock 系统封锁,暂离 4.3.18 w_log 操作日志查询维护 4.3.19 w_lsh 流水单号格式设置 4.3.20 w_menu 系统菜单名称维护 4.3.21 w_reg 注册信息 4.3.22 w_set 操作权限的设置 4.3.23 w_sql 查询分析器 4.3.24 w_sqlca 数据库连接参数设置 4.3.25 w_usertc 数据字典维护,用户表,列的中文示意 4.2.26 w_word 修改口令 =================================================================================== 5 有关系统表 =================================================================================== 5.1 S_SYST 系统信息字典 系统的注册信息,版本信息等--------------------------------------- create table S_SYST ( P_ST varchar(20) NOT NULL,--信息代码 C_NAME varchar(40) NOT NULL,--信息名称 C_DATA varchar(255) NULL, --数据取值 CONSTRAINT PK_SYSTT PRIMARY KEY CLUSTERED (P_ST)) ; go ---------- 插入测试数据
insert into S_SYST (P_ST,C_NAME,C_DATA) values('SHORT','单位简称','单位简称'); go insert into S_SYST (P_ST,C_NAME,C_DATA) values('DNAME','单位名称','单位名称'); go insert into S_SYST (P_ST,C_NAME,C_DATA) values('ENAME','英文名称','EnglishName'); go insert into S_SYST (P_ST,C_NAME,C_DATA) values('SNAME','系统名称','系统名称'); go insert into S_SYST (P_ST,C_NAME,C_DATA) values('REGS','授权信息','1000'); go 5.2 S_FILE 系统(升级)文件字典 --------------------------------------------------------- create table S_FILE ( P_FN varchar(20) NOT NULL,--文件名 P_VER varchar(20) NOT NULL,--版本号 C_SIZE integer NULL,--文件尺寸 C_BLOB image NULL,--文件内容 C_NOTE varchar(255) NULL,--注释 CONSTRAINT PK_FILE PRIMARY KEY CLUSTERED (P_FN,P_VER)) ; go --------- 插入测试数据
5.3 S_USER 操作员字典 ------------------------------------------------------------
create table S_USER ( P_US varchar(20) NOT NULL,--操作员编号 C_NAME varchar(20) NOT NULL,--操作员姓名 C_PASS varchar(20) NOT NULL,--口令 C_LINK bit NULL,--在线 C_NOTE varchar(255) NULL, --注释 CONSTRAINT PK_USER PRIMARY KEY CLUSTERED (P_US)) ; go --插入测试数据
insert into S_USER (P_US,C_NAME,C_PASS,C_NOTE)
values('9999','susue','9999','超级用户'); go
5.4 S_INFO 系统功能字典 即动态菜单部分------------------------------------------------------
create table S_INFO ( P_IN varchar(20) NOT NULL,--编号 C_NAME varchar(40) NOT NULL,--名称 C_WIND varchar(40) NOT NULL,--打开的窗口 C_PARM varchar(40) NULL, --参数 C_NOTE varchar(255) NULL, --注释 CONSTRAINT PK_INFO PRIMARY KEY CLUSTERED (P_IN)) ; go --------- 插入测试数据(系统功能模块)
insert into S_INFO (P_IN,C_NAME,C_WIND,C_PARM)
values('1000','辅助信息设置','',''); go insert into S_INFO (P_IN,C_NAME,C_WIND,C_PARM) values('1001','辅助信息 - 部门设置','w_input1',''); go insert into S_INFO (P_IN,C_NAME,C_WIND,C_PARM)
values('2000','基础信息设置','',''); go insert into S_INFO (P_IN,C_NAME,C_WIND,C_PARM) values('2001','基础信息 - 员工信息','w_input1',''); go 5.5 S_SET 操作权限字典 ------------------------------------------------------------
create table S_SET ( PF_US varchar(20) NOT NULL, --操作员 PF_IN varchar(20) NOT NULL, --操作权限编号 C_NOTE varchar(255) NULL, --注释 C_OUNT int NULL, --操作次数 C_LAST varchar(20) NULL, --最后操作时间 C_DSET bit NULL, --数据权限 CONSTRAINT PK_SET PRIMARY KEY CLUSTERED (PF_US,PF_IN)) ; go --------- 插入测试数据
5.6 S_LOG 操作日志字典 ------------------------------------------------------------
create table S_LOG ( P_ID int IDENTITY NOT NULL, --ID C_UID varchar(20) NULL, --编号姓名 C_DDTT varchar(20) NULL, --日期时间 C_ACT varchar(20) NULL, --动作 C_SQL varchar(255) NULL, --SQL语句 CONSTRAINT PK_LOG PRIMARY KEY CLUSTERED (P_ID)) ; go --------- 插入测试数据
insert into S_LOG (c_uid,c_ddtt,c_act,c_sql) values ('susue','2003-12-14','insert','insert') 5.7 创建操作日志备份 -------------------------------------------------------------
create table S_LOGBAK ( P_ID int IDENTITY not null, --ID C_UID varchar(20) null, --编号姓名 C_DDTT varchar(20) null, --日期时间 C_ACT varchar(20) null, --动作 C_SQL varchar(254) null, --SQL语句 constraint PK_LOGBAK primary key clustered (P_ID)) ; go 5.8 创建动态单据流水号 -------------------------------------------------------------
create table S_LSH ( P_ID varchar(31) not null, --表名ID S_CMNT varchar(31) null, --中文示意 I_YEAR int null default 0, --年位数 I_MONTH int null default 0, --月位数 I_DAY int null default 0, --日位数 S_DATE varchar(8) null, --日期格式 I_WDTH int null, --流水位宽度 S_MAX varchar(31) null, --最大单号 S_NOTE varchar(255) null, --备注 constraint PK_LSH primary key clustered (P_ID)) ; go =============================================================================================
6 例程试用下载 ============================================================================================= /////////////////////////////////////////////////////////////////////////// // PB + SQL Server 程序开发框架 // 例程 : http://sites.google.com/site/oands2/Home // 原创 : susue苏福强 QQ:396003903
// Susue : susue@21cn.com // : susuenet@hotmail.com // 日期 : 2006-04-22 /////////////////////////////////////////////////////////////////////////// |
