三层系统架构方案Word文件下载.docx
《三层系统架构方案Word文件下载.docx》由会员分享,可在线阅读,更多相关《三层系统架构方案Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
客户端基类图:
主要界面演示:
应用服务器:
客户端主界面:
打开的子窗体:
系统功能调整界面:
主从操纵表
客户端目录及配置文件:
客户端自动更新界面:
角色权限分配:
用户角色分配:
基类及公共类简要说明:
1、权限基类:
TbaseSecurityfrm
权限基类主要有二大功能,一:
初始化窗体的权限点(如:
添加、删除等);
二:
初始化窗体的菜单相关属性(如:
双亲、功能名、位置)。
有以下属性:
propertyRightList:
TFuncRigthreadFRightList;
//权限管理列表
propertyFunctionID:
stringreadFFunctionIDwriteFFunctionID;
//功能ID
propertyParentID:
stringreadFParentIDwriteFParentID;
//菜单的双亲ID
propertyFunctionName:
stringreadGetFunctionName;
//功能名称
propertyPosIndex:
IntegerreadFPosIndex;
//菜单中同一级的顺序号
propertyImageIndex:
IntegerreadFImageIndex;
//菜单中的图标序号
以上属性,除RightList、FunctionName外,其它属性都需要在继承窗体的OnCreate中初始化值,其中FunctionID必须在项目中唯一。
有以下方法:
procedureInitFunctionRight;
virtual;
//初始化Form的权限参数
procedureGetUserFunctionRight;
//取得用户功能权限
窗体可以自定义权限点,需在InitFunctionRight中添加,
如:
FRightList.AddRight('
Access'
'
访问'
);
如何保存登录用户对窗体的使用权限,需要覆盖GetUserFunctionRight来实现,
FRightList.AddHasRight(psName);
2、单表操纵基类:
TbaseDatafrm
单表操纵基类,主要实现对数据表的操纵和严格控制操纵时各控制的状态。
propertyEditClass:
TBaseDataEditClassreadFEditClasswriteSetEditClass;
//编辑Form类propertyTableName:
stringreadFTableNamewriteFTableName;
//表名
propertyPKFields:
stringreadFPKFieldswriteFPKFields;
//主键名,如有多个用;
隔开
propertyQuerySQL:
StringreadFQuerySQLwriteFQuerySQL;
//表名、视图名、查询语句
propertyPageSize:
integerreadFPageSizewriteFPageSize;
//每页的大小(行数)
propertyCurrPage:
integerreadFCurrPagewriteFCurrPage;
//要显示的当前页
propertyPageCount:
integerreadFPageCount;
//总页数
propertyTotleRecord:
IntegerreadFTotleRecord;
//总记录数
propertyGridCanEdit:
BooleanreadFGridCanEditwriteFGridCanEdit;
//Grid能够编辑
propertyCanEditGridCol:
Boolean;
//Grid列是否可编辑保存
propertySpiltGetPage:
BooleanreadFGetPagewriteFGetPage;
//是否分页取数据
propertyNoUpdateFields:
stringreadFNoUpdateFieldswriteFNoUpdateFields;
//不更新的字段列表,如有多个字段用;
如果要对数据表进行编辑操作,必须对TableName、PKFields赋值,如果只是查询操作,则只需对QuerySQL赋值即可。
如果想在Grid中进行数据编辑,需对GridCanEdit赋值true,否则,需对EditClass赋值,EditClass必须是继承于TbaseDataEditfrm的子类。
如果想重新设置页大小,需设置PageSize的值,所有属性如要赋值都需在窗体的OnCreate中赋值。
procedureChangeMasterStates(pbCanModify:
Boolean);
//改变编辑表的控件状态
procedureGetPageData;
//取得分页数据
procedureGetUserAction(psName:
string);
//取得登录用户拥有的权限
如果用户想调整操纵数据时各控件的使用状态,需要覆盖ChangeMasterStates方法,对相关状态进行控制。
3、主从表操纵基类:
TbaseMasterDetailfrm
主从表操纵基类主要实现了对主从数据表的操纵控制处理。
propertyGridDetEdit:
//从表GRID可以编辑
propertyDetTableName:
string;
//从表名
propertyDetEditClass:
TbaseDataEditClass;
//编辑从表的窗体类
propertyDetPKFields:
stringreadFDetPKFieldswriteFDetPKFields;
//从表主键
继承于TbaseMasterDetailfrm的子类,除了要对它的父类相关属性赋值外。
procedureChangeDetStates(pbCanModify:
//改变编辑从表的控件状态
procedureOpenDetDataSet;
virtual;
abstract;
//打开从表数据集
注意点:
主表数据集滚动时,会执行OpenDetDataSet方法,所以取主表的从表数据,需在这个方法中实现。
4、数据编辑基类:
TBaseDataEditfrm
数据编辑基类用于编辑单条数据记录。
propertyModifyState:
TModifyStatereadFModifyStatewriteSetModifyState;
//状态
propertyDataSet:
TDataSetreadFDataSetwriteSetDataSet;
//修改数据集
propertySoonSave:
BooleanreadFSoonSavewriteFSoonSave;
//立刻保存
procedureVerifySaveData;
//校验保存数据合法性
procedureSetDataValue;
//初始化其它信息
如果要在保存之前对数据进行校验,需覆盖VerifySaveData方法。
5、扩展菜单基类:
TBaseMenufrm
扩展菜单基类用于扩展每个模块功能的父级菜单和分隔符。
procedureAddDirAndSpile;
//添加目录和分隔符
procedureAdd(psFuncID,psParentID,psFuncName:
piPos,piImgIndex:
Integer;
piFuncType:
TFuncType);
//添加一个菜单功能
注意:
每一个子系统都必须实现一个TbaseMenufrm的子类,用于扩展该子系统的菜单功能树,每个继承子类都需覆盖AddDirAndSpile方法,添加相关菜单项。
6、本地数据操纵对象:
TLocalSQL
本地数据操纵对象是一个访问服务器对应服务方法的本地对象,在系统初始化时,就初始化了一个可以直接调用的实例。
它有以下调用方法:
//根据SQL语句取数据集
functionSelectData(constSQL:
String;
outData:
Variant;
outErrMsg:
String):
Integer;
//根据两条SQL语取两个数据集
functionSelectDupleData(constSQLA:
constSQLB:
outDataA:
outDataB:
//执行需要事务的SQL语句
functionExecuteSQL(constSQL:
//执行存储过程
functionExecuteProc(constProcName:
constParamArr:
ParamArray;
constRetRecord:
Boolean;
outRetParamArr:
outErrMsg:
//更新单表数据集
functionUpdateData(constDelta:
constTableName:
constKeyFields:
//更新两个表的数据集
functionUpdateDupleData(constDeltaA:
constTableNameA:
constKeyFieldsA:
constDeltaB:
constTableNameB:
constKeyFieldsB:
//执行SQL命令及更新另一个表的数据
functionUpdateSQLAndData(constSQL:
constDelta:
//根据SQL查询语句取得分页查询数据
functionGetQueryPageData(constSelectSQL:
varCurPage:
varPageSize:
outtotalRecords:
outtotalPages:
//取得唯一编号列表
functionGetUniqueID(consttableName:
constFieldName:
constCount:
varIDList:
//取得系统时间
functionGetDatetime(outAValue:
DateTime;
//根据SQL查询条件,取得查询到的记录数
functionGetRecordCount(constSQL:
outRecCount:
7、窗体注册管理类:
TManagerForm
窗体注册管理类主要负责注册并管理需要用菜单打开的Form,在它所在单元,提供两个全局承数,用来注册Form和反注册Form,方法如下:
procedureRegisterClassE(AClass:
TPersistentClass);
//注册窗体
procedureUnRegisterClassE(AClass:
//反注册窗体
因此,每个子系统下的子窗体,都需在pas文件的initialization段用方法RegisterClassE进行注册,在finalization段用方法UnRegisterClassE进行返注册,注意需要UsesFormManagerListUnt单元。
8、查询对话框类:
TdanngQryDlg
查询对话框是一个通用的生成SQL查询条件的对话框组件。
它有以下属性:
published
//生成的SQL查询条件,不带where
TdataSet;
//要查询的数据集
propertyFields:
TStrings;
//字段列表,格式为:
列标=字段名
propertyTitle:
stringreadFTitlewriteSetTitle;
//对话框标题
propertyIsFilter:
BooleanreadFIsFilterwriteFIsFilter;
//是否过滤查询SQL条件
propertyDatabaseType:
TdDataTypereadFDatabaseTypewriteFDatabaseType;
//数据库类型
propertyBoolList:
TStringsreadFBoolListwriteSetBoolList;
//字符串型逻辑字段列表,在属性的值格式为:
列标=标识假,标识真,如:
是否学生=’No’,’Yes’
propertyAssingedSink:
TAssingedSinkreadFAssingedSinkwriteFAssingedSink;
//指定皮肤事件,为了使新创建的窗体有皮肤,需写此事件。
它有一个方法:
functionExcute:
//返回值为真,则代表生成查询SQL条件正确,生成的查询条件为:
QuerySQL。
9.DBGrid列信息操纵类:
TxhGridCol
它用于初始化和保存DBGrid的列标信息,如一列改变长度,一列移到另一列前,改变后可以跟据登录用户保存起来。
propertyUserName:
string;
//当前登录用户,
propertyGrid:
TDBGridEh;
//操纵的DBGrid;
它有以下方法:
procedureSaveGridRowInfo;
//保存Grid列信息
procedureLoadGridRowInfo;
//装载Grid列信息
procedureClearGridRowInfo;
//消除保存的列信息
开发演示,请看演示文档。