程 序 编 写 规 范
1、 变量声明d
所有的变量不 论类型, 均以v开头, 如:
var vWorkerName:string;
vYear:integer;
vDate:tdate;
_recordset对象的前缀为vrs。
特殊的变量:vSql:基本上所有的SQL语句均先用变量vSql斌值, 如:
var vSql:string;
begin
vsql:=’select a.fdworker ‘;
vsql:=vsql+’ from tabworker a ‘;
end;
控件命名
类 前缀 示例
TEdit ed edWorkerNo
TDBGrid grd grdWorker
TCombobox cbo cboWorker
TDateTimePicker dp dpDate
TButton c cOk cCancel
TCheckBox chk chkCancel
TSpeedButton sb sbWorker
TClientDataSet cln clnWorker
TDataSource ds dsWorker
TAdoDataSet adods adodsWorker
TPanel pan panTop
TForm frm frmWorker
TDataSetProvider pvd pvdWorker
TTreeview trv trvRawType
TListview lst lstWorker
TPageControl pc pcWorkerInformation
TImage img imgWorker
TMemo ed edMemo
2、 函数及过程的命名3、
函数的前缀用f
例如:处理数据检查的函数:function fCheckData:boolean;
过程的前缀用p
例如:处理工人离职的过程:procedure pWorkerLeave;
命名规则
所有变量或控件的命名 均采取英文意义命名, 并且尽量不 要用缩写。
例如: 对输入工人姓名的TEdit的命名为:edWorkerName
而不要命名为:edWN等缩写形式
数据表的前缀为tab, 字段的前缀为fd。
例如: 工人表的名称为:tabworker
工人编号的字段为:fdworkerno
数据库操作方法
操作数据库(选择、插入、更新、删除):基本上用SQL语句来操作数据库, 避免用Data Aware类的控件来操作数据库。
例如:插入一条生产记录:
var vSql:string;
vWorkerID:string;
vProductNum:string;
begin
xxxxxx;
………;
vsql:=’insert into tabproduct (fddate,fdworkerid,fdproductnum) values(‘;
vsql:=vsql+vinfo.vdbsqldate(date);
vsql:=vsql+’,’+(vWorkerID);
vsql:=vsql+’,’+(vProductNum);
vsql:=vsql+’)’;
vinfo.execute(vsql);
end;
*注:vinfo代表一个自定义类TInfo的一个实例,里面封装了各种函数,具体内容在后面有说明。
用TDBGrid显示数据的方法:
1. 使用TDBGrid TDataSource TClientDataSet TDataSetProvider TAdoDataSet控件。
2. 连接方式为TDBGrid->TDataSource->TClientDataSet->TDataSetProvider->TAdoDataSet
3. 先用_recordset对象来接收数据,4. 然后把_recordset对象斌给TAdoDataSet控件,5. 再调用TClientDataSet的Close方法、Open方法。
多用户操作数据的处理:通常把要操作的表进行锁定, 锁定方法为用TInfo类的pLockTable方法。
数据合法性检查方法
通常在要保存数据的时候之前进行数据合法性的检查, 不 要在输入的时候检查数据的合法性。
检查包括:
1. 检查是否是整数;
用类TInfo的fIsInt函数判断。
2. 检查是否是浮点数;
用类TInfo的fIsFloat函数判断。
3. 检查是否是日期;
日期用TDateTimePicker来进行输入,通常不用检查。
4. 检查是否没有输入;
用类TInfo的flen函数判断。
5. 数据完整性的检查(检查内容会在开发文档中说明);
6. 数据逻辑性的检查(检查内容会在开发文档中说明);
对于字符类型的数据, 注意一定要用trim函数清除前后的空格。
类TInfo的说明
Tinfo类封装了一些基本的函数、过程及常数:
函数及过程:
6. function fIsFloat(vData:string):boolean;
7. function fIsInt(vData:string):boolean;
8. function fLen(vData:string):boolean;
9. procedure pBeginTrans;//事务开始
10. procedure pCommitTrans;//事务提交
11. procedure pRollBack;//事务回滚
12. procedure execute(const vSql:string;var vRs:_recordset;vAbort:boolean=false);overload;
安全的SQL执行函数1,vSql为要执行的SQL语句,vrs为接收返回值的_recordset对象,vAbort表示当发生属于连接(网络中断)的错误时,是否中止处理。通常执行包含在一个事务里的SQL语句时用true,而不在事务里的SQL语句不用指定。
例如: var vSql:string;
vrsWorker
begin
vsql:=’select a.fdworkerno,a.fdworkername ‘;
vsql:=vsql+’ from tabworker a ‘;
vinfo.execute(vsql,vrsworker);//这句没有指定vabort,则缺省为false
{上面这一句在执行,如果网络中断,导致不能连接到数据库,则会进行提示是否要重试,如果不要重试,则退出整个系统;如果重试,则会重试连接到数据库,但如果仍然不能连接,则重复进行提示直到连接上或由用户取消连接以退出系统}
vinfo.execute(vsql,vrsworker,true);//这句指定vabort
{上面这一句在执行,如果网络中断,导致不能连接到数据库,则会进行提示不能连接到数据库,所以执行中止。并会尝试连接到数据库。如果不能连接,则提示是否要重试,如果不要重试,则退出整个系统;如果重试,则会重试连接到数据库,但如果仍然不能连接,则重复进行提示直到连接上或由用户取消连接以退出系统}
end;
13. procedure execute(const vSql:string;vAbort:boolean=false);overload;
安全的SQL执行函数2,与1的区别在于1有返回数据集。
常数:
1. vDateStr:当前计算机的日期格式,2. 如果当前计算机的格式为2位年份,3. 则转化为4位年份。
例如:当前计算机的短日期格式为’yy-mm-dd’,则vDateStr为’yyyy-mm-yy’。
4. vCurrentUserNo:当前登录的操作员的编号。
5. vCurrentUserName:当前登录的操作员的名6. 称。