资源描述
Access 命名规则:
网址:.net
好命名规则让你受益终身
为什么在程序编写中需要遵循一种好命名规则呢。
一方面,统一命名原则可以让你代码始终保持一致风格,便于你自己看懂,也便于与别开发人员交流和沟通,事实上,这些原则也是一种语言,这是你们沟通最佳媒介,有了它,你甚至不需更多解释,对方就能看懂你程序。
1.
编程老手也许会长期用隐含错误方式编程(习惯成自然),发现毛病后都不肯相信那是真!
2.
编程高手可以在某一领域写出极有水平代码,但未必能从全局把握软件质量方方面面。
3.
在团队开发中, 一种好命名规则可以最大限度实现程序共享, 加快开发进度。让协作者、后继者和自己在当前或将来好久后来,在最短时间内看清你程序构造,理解你设计思路。从而大大提高代码可读性、可重用性、可移植性。
4.
通过命名注入更多信息在源代码中,可以使你程序易读和易于维护,减少某些隐性错误,同步大大缩短你写程序注释和程序文档时间,由于你命名事实上已经是一种程序注释。
5.
提高与ACCESS对象协作能力, 涉及对象排序, 自已函数库编写, 以及查找与替代能力,例如你更容易把报表和窗体对象、表和查询对象分开并按照一定规则排序。
6.
有助于程序编写工具开发, 可以编写自己加载项并遵守好命名规则来加快程序代码编写、排版以及自动纠错。如全局查找与替代工具、代码分析与优化工具、报表自动生成工具等等。
7.
更易于发当代码错误并更易于修正错误,当系统规定实现功越来越复杂或当代码量到达一定规模,不论程序员与否乐意, 浮现错误几乎都是不可避免,但如果人们都遵循一定编程原则,则可以最大限度地减少错误浮现机率,并且在浮现错误状况下也能迅速地发现和排除。
8.
长期遵循一种好命名规则能让你长期稳定地编写高质量、高效率和更大型程序。
LNC for Microsoft Access 命名规则简介:
LNC即Leszynski Naming Convention, 本来在《The Leszinski/Reddick Guidelines for Access 1.x, 2.x》这本白皮书中由Stan Leszynski 和 Greg Reddick 推荐使用命名规则, LNC 开始于 Access 1.0这个版本, 日后随着ACCESS版本升级,这个命名规则就被迅速传播开来, 在当今ACCESS和VB开发者和开发团队中, 它已经成为事实中命名原则, 在国外已经广泛被使用,并被微软推荐使用, 它规范了从ACCESS数据库设计、窗体与报表设计以及程序编写一整套完整且易用命名原则, 我看过国内许多VB和ACCESS源程序, 但很少人, 特别在ACCESS程序员中, 注意到命名规则并遵循某种命名商定, 这给程序交流导致了很大困难, 同步, 由于程序员自己没有一套原则命名规则, 在编写过程中随意命名, 随着时间推移, 自已都难以阅读和修改此前程序源码。
LNC for Microsoft Access 详解:
LNC命名规则分为两个级别,级别1是比较容易理解,但级别2对对象进行了更严格划分,级别1更多地适合初级程序员,而级别2则更适合于某些有经验开发者,或在某些非常复杂或多层构造系统开发中使用,你应当依照你自己经验和习惯来选取更适合你命名规则级别。请注意,不是命名规则所有某些都分为两个级别,而只是在某些某些有所不同
LNC命名规则是基于匈牙利命名法,为什么叫匈牙利命名法呢,重要是取自于作者国籍,它作者 Charles Simonyi ,也曾经使用过ACCESS初期版本。匈牙利命名法是在她博士论文中提到。匈牙利命名法某些基本原理在Visual Basic阐明手册和某些开发文档中都会被提及到,微软内部也是使用匈牙利命名法,在世界上,已有非常多程序员在使用这个命名法,LNC命名规则事实上是将匈牙利命名法应用到ACCESS上, 并特别针对ACCESS某些特性进行了某些完善。
LNC命名规则倡导所有对象名称均由下面四个某些构成:
一种或各种前缀、一种标记符、基本名字、限定词
[prefixes]tag[Basename][Qualifier] 注:[]里内容表达为可选内容。
标记符是必要内容,但普通状况下,你都需要一种基本名字来精确描述你变量实际功能,以用来区别同类型不批准义变量。如果你仅仅使用一种标记符来标记一种变量,那么就比较难以辨别不同变量,但有一种状况除外,那就是你传一种对象参数给另一种函数时,可以不需要指定基本名字,例如你需要传递一种窗体对象给一种初始化窗体颜色函数,那么这个作为参数传递窗体对象事实上是作为一种通用窗体对象,因此你不必为它指定一种详细名字,而直接使用标记符即可。
下面举出几种简朴例子:
名称
前缀
标记符
基本名字
限定符
备注
tblCustomer
tbl
Customer
客户表
aintPartNum
a
int
PartNum
零件号数组
strCustNamePrev
str
CustName
Prev
本来客户名
前缀和标记符总是小写,这样当咱们眼光扫过对象名称时,目光就会停留在以大写字母开头基本名字上面,这样提高了名称可读性,基本名字和限定符都是以大写字母开头。
基本名字简洁地描述了这个对象意义,而非描述它类别,例如在查询qryPartNum这个名称中,PartNum就是基本名字,它是 “Part Number”缩写,对象标记符应当是简朴且易记忆,而前缀是放在对象名和标记符之前,用来提供更多或额外信息,例如数字对象intPartNum前加个a,代表这个零件号数组,即aintPartNum,更进一步,如果咱们需要一种变量来指定aintPartNum这个数组索引,那需要在这个数组前面再加一种前缀I,那这个变量名称应当是iaintPartNum。固然,你会发现,如果严格按照上述规范来命名你所有对象,需要你付出更多努力并增长你既有工作量,但如果一年后让你重新来修改下面这两种风格代码,你会觉得哪种更易于修改和更易于重用呢。
第一种风格:
Z = Y(X)
第二种风格:
intPart = aintPartNum(iaintPartNum)
对象限定符是在基本名字背面再加一种符号以更详细阐明这个对象,咱们还是此前面iaintPartNum为例,如果你想为这个数组保存两个索引号,一种是第一种索引号,一种是最后一种索引号,在iaintPartNum加上限定符就变成了iaintPartNumFirst和iaintPartNumLast
命名数据库对象:
数据库对象(表、查询、窗体、报表、宏、模块)是在ACCESS应用程序中经常被引用对象,它们会出当前宏、VBA代码和属性中,因此如何对它们对的命名是非常重要。
微软所带Northwind数据库例程以及微ACCESS手册中容许对象名中存在空格,但咱们不建议这种命名风格,在许多数据库引擎和编程语言中,涉及ACCESS BASIC,空格是一种分隔符,它不是对象名称一种逻辑某些,并且,在许多数据库平台中涉及微软SQL SERVER数据库和WORD文字解决程序,带有空格名称是不能工作。相反,使用一种大小写混合方式来指定名称,例如:tblAccountsPayable,如果一定要使用空格,那就用下划线“_”来取代它。
对LNC命名规则中,所有数据容器对象均有一种标记符,在对象名称前面加上标记符对非编程人员来说可以不会增长太多可读性,但对于编程新手来说,当她们需要在报表精灵数据源列表框或一种窗体控件源选取一种表或查询时,添加标记符会带来很大协助,由于ACCESS会把表和查询不加分别地放在一种长列表里。
下面是级别1数据库容器对象标记符:
对象
标记符
例子
Table
tbl
TblCustomer
Query
qry
qryOverAchiever
Form
frm
FrmCustomer
Report
rpt
rptInsuranceValue
Macro
mcr
mcrUpdateInventory
Module
bas
BasBilling
在级别1,数据库容器对象唯一需要一种限定符就是 Sub,它是放在那些子窗体或子报表窗体名背面. 例如窗体 frmProductSupplier 拥有一种有关子窗体frmProductSupplierSub. 这样,一旦排序时,对象和它子对象就会顺序排在一起。
下面是级别2数据库容器对象标记符:
对象
标记符
例子
Table
tbl
tblCustomer
Table (lookup)
tlkp
tlkpShipper
Query (select)
qry (or qsel)
qryOverAchiever
Query (append)
qapp
qappNewProduct
Query (crosstab)
qxtb
qxtbRegionSales
Query (data definition)
qddl
qddlAddWorkColumn
Query (delete)
qdel
qdelOldAccount
Query (form filter)
qflt
qfltSalesToday
Query (lookup)
qlkp
qlkpStatus
Query (make table)
qmak
qmakShipTo
Query (pass-through)
qspt
qsptArchiveQuantity
Query (union)
quni
quniOrderDetail
Query (update)
qupd
qupdDiscount
Form
frm
frmCustomer
Form (dialog)
fdlg
fdlgLogin
Form (menu)
fmnu
fmnuUtility
Form (message)
fmsg
fmsgWait
Form (subform)
fsub
fsubOrder
Report
rpt
rptInsuranceValue
Report (subreport)
rsub
rsubOrder
Macro
mcr
mcrUpdateInventory
Macro (for form)
m[formname]
mfrmCustomer
Macro (menu)
mmnu
mmnuEntryFormFile
Macro (for report)
m[rptname]
mrptInsuranceValue
Module
bas
basBilling
如果使用级别2 命名规则,则在数据库容器里排序时,有着类似功能对象会排在一起,当你应用越来越大时,在你数据库系统中也许会包括100个窗体或者更多,而其中30个窗体是用来显示消息用,如果有一天,你需要将这个消息窗体里面文本框文字由黑色所有改成红色,你必要逐个打开每个窗体拟定它与否消息窗体然后再修改文本框颜色,但如果你把它们名称设为包括同样标记符fmsg,那么排序时它们会排在一起,那你修改时候就不必一种一种去筛选了,大大节约了你修改时间。
请小心仔细地选取表名称,由于变化ACCESS对象名称并不会自动应用到整个数据库,因此当在ACCESS对象创立时给它对的命名是非常重要。例如,在后来开发过程中如果需要变化表名称,你可需要变化所有引用到到这个表名表、查询、窗体、报表、宏和模块中引用到到这个表名,虽然,有某些辅助工具可以帮你减轻某些工作量,但最佳还是在一开始就给它对的地命名。
你也许但愿引用了一种表每个数据对象均有一种与表名同样基本名字,而使用相应标记符来区别它们,例如,你表名是tblCustomer,它主窗体名应当是frmCustomer,它主报表名应当是rptCustomer,而引起有关这些事件宏名应当是mfrmCustomer和mrptCustomer,咱们也建议表名称不适当用复数形式,例如使用tblCustomers,由于一种表普通都是包括多条记录,这暗示它自身就是复数。
数据库对象前缀
?
咱们使用四种数据库对象前缀:
?
"zz"表达那些你已经废弃但是也许想要在数据库中将来作为参照或保存使用对象 (举例来说,zzfrmPhoneList). "zz"将导致对象名称排在数据库容器底部,这样,它就会放在一种不显眼地方,但它依然是有效。
?
"zt"表达某些暂时对象 (举例来说,ztqryTest).
..1
"zs"表达系统对象 (举例来说,zstblObjects). 系统对象是那些不被最后顾客使用那些关于系统开发和维护方面对象,例如错误日记,开发注解,文档,关联信息等等. (注意 "zs" 是前缀.这样系统对象就会尽量排在数据库容器底部).
"_" 来表达那些正在开发中对象 (举例来说,_mcrNewEmployee). 一种对象名字前面加上下划线可使它排在数据库容器顶端,提示你它需要注意. 当这个对象已经所有完毕后 ,除去下划线,它将会正常地排序.
字段标志符
在字段上使用标志符始终是一种争议话题,甚至在这个文章作家之间也存在不同看法. Greg主张字段标志符也应当统一使用与其他ACCESS数据对象及VBA中使用同样命名规则 ,而Stan则更喜欢使用一种与平台和数据类型无关命名方式,即字段名称不需要加字与字段类型有关标志符,这样有助于数据库移植和互相连通。
考虑到两者立场,连同你自己需求,你们可以选取在命名时与否加入下表这些标志符:
数据类型
标志符
例子
Binary
Bin
binInternal
Byte
Byt
bytFloorNum
Counter
Lng
lngPKCnt
Currency
Cur
curSalary
Date/Time
Dtm
dtmHireDate
Double
dbl
dblMass
Integer
int (C programmers may prefer "w")
intUnit
Long
lng (C programmers may prefer "dw")
lngPopulation
Memo
mem
memComments
Ole
ole
oleEmpPhoto
Single
sng (Some users find "sgl" more mnemonic )
sngScore
Text
str (Used as opposed to "txt" because a textbox control uses "txt". C programmers may prefer "sz")
strFirstName
Yes/No
ysn (C programmers may prefer "f")
ysnDiscounted
?
注意:
..2
ACCESS引擎 ("jet") 支持二进制数据类型,但它并没有对顾客开放这种功能,但是你可以通过汇入或链接到外部表来实现这种数据类型,并且,某些系统表也使用这种数据类型命名。
..3
在ACCESS内部,自动编号数据类型是当作是一种长整型来对待,只是增长了一种auto-increment特殊属性,而自动编号字段经常会作为外键被其他表引用,因此Greg使用了与长整型同样标记符,但如果你想区别长整型与自动编号类型,则可以在对象名称最后加上Cnt限定符
..4
标签控件对象
当你创立一种新绑定控件时,窗体或报表会自动分派字段名称给这个控件名称,控件与字段使用相似名称会导致命名混乱,特别你在VBA代码中同步引用到字段和控件,有时会导致某些错误,为避免这种状况,需要在控件名称前面加上标记符,例如一种文本框控件,它控件来源是Customer,那么咱们给它取名称就是txtCustomer.
在级别1 中,使用者只是想区别活动控件和标签,对不太关怀控件类型,这样,控件标记符就如下所示:
Object
Tag
Example
Label
lbl
lblLastName
Other types
ctl
ctlLastName
级别1描述了了控件之间一种很小差别性,但是,它在函数、宏或程序文档还是非常有用,例如,通过它可以区别哪些控件是属于标签,那些是其他控件,其中前者是不可修改,而后者则可从顾客输入或代码中接受值
级别2指明了窗体或报表中控件类型,这样VBA代码或宏更容易区别这些控件属性和事件
对象
标记符
例子
Chart (graph)
cht
chtSales
Check box
chk
chkReadOnly
Combo box
cbo
cboIndustry
Command button
cmd
cmdCancel
Frame (object)
fra
fraPhoto
Label
lbl
lblHelpMessage
Line
lin
linVertical
List box
lst
lstPolicyCode
Option button
opt
optFrench
Option group
grp
grpLanguage
Page break
brk
brkPage1
Rectangle (Visual Basic uses the term "shape")
shp
shpNamePanel
Subform/report
sub
subContact
Text box
txt
txtLoginName
Toggle button
tgl
tglForm
对控件来说,唯五前缀就是 “zs”,它只出当前级别2中,它表白这是一种系统控件,只被窗体或代码使用,而不对顾客开放,例如有些控件在运营时是不可见,但它也许用来存储某些暂时值或传递参数给窗体
唯一前缀为控制, "zs",出当前水平 2. 它批示系统- 水平被形式用或编码控制但是不对使用者显示. 如此控制普通不对~感到看得见跑计时但是她们也许储存暂时价值,否则叁数传给形式.
命名代码或宏中对象:
使用原则描述性强变量、常量、和函数名可大大增强代码共享、维护、和联接能力
1.
变量标记符
每个变量都应有一种如下表所示标记符
变量类型
标记符
例子
Container
con
Dim conTables as Container
Control
ctl
Dim ctlVapor As Control
Currency
cur
Dim curSalary As Currency
Database
db
Dim dbCurrent As Database
Document
doc
Dim docRelationships as Document
Double
dbl
Dim dblPi As Double
Dynaset
dyn
Dim dynTransact As Dynaset
Flag (Y/N,T/F)
f
Dim fAbort As Integer
Field
fld
Dim fldLastName as Field
Form
frm
Dim frmGetUser As Form
Group
gru
Dim gruManagers as Group
Index
idx
Dim idxOrderId as Index
Integer
int
Dim intRetValue As Integer
Long
lng
Dim lngParam As Long
Object
obj
Dim objGraph As Object
Parameter
prm
Dim prmBeginDate as Parameter
Property
prp
Dim prpUserDefined as Property
QueryDef
qdf (or qrd)
Dim qdfPrice As QueryDef
Recordset
rec (or rst)
Dim recPeople as Recordset
Relation
rel
Dim relOrderItems as Relation
Report
rpt
Dim rptYTDSales As Report
Single
sng
Dim sngLoadFactor As Single
Snapshot
snp
Dim snpParts As Snapshot
String
str
Dim strUserName As String
Table
tbl
Dim tblVendor As Table
TableDef
tdf (or tbd)
Dim tdfBooking as TableDef
Type (user-defined)
typ
Dim typPartRecord As mtPART_RECORD
User
usr
Dim usrJoe as User
Variant
var
Dim varInput As Variant
Workspace
wrk (or wsp)
Dim wrkPrimary as Workspace
Yes/No18
ysn
Dim ysnPaid As Integer
在咱们命名方式中,不使用$ 和 %这些数据类型前缀,由于在ACCESS和Visual basic文档中是不推荐使用这些前缀
象窗体和报表这样数据库对象变量标记符是与数据库对象标记符是同样,这样命名有助于编程,由于普通你分派给一种变量名称(如tblVendor)与它所引用对象(tblVendor)有同样名称,这样就会在编程中提供统一对象
2.
常量和自定义数据类型
使用大写名字作为常量,这是WINDOWS编程一种习惯,
3.
范畴前缀
命名级别2中引入了变量和常量范畴前缀概念,范畴放在其他所有前缀前面
➢
局部定义变量没有前缀
➢
局部定义静态变量前缀为 "s",例如 "sintAccumulate".
➢
在模块声明节里(或窗体代码)定义变量使用m作为前缀,例如 "mcurRunningSum".
➢
使用 Global 定义全局变量使用前缀 "g",例如 "glngGrandTotal".
➢
作为函数或子程序参数传递变量 (函数名称背面圆括号里) 使用前缀 "p",例如 "pstrLastName". 此外,当在一种函数定义某些形参和值参都存在时,咱们有时也使用 "r" 而不是 "p" 来指明是形参,用 "v" 来指明是值参,。
➢
对象名称背面限定符进一步区别那些意义很接近对象. 你也许已经针对各类应用设计了自己一系列限定符,但是,下表中有些通用限定符
变量属性
限定符
例子
Current element of set
Cur
iaintCur
First element of set
First
iaintStockFirst
Last element of set
Last
iaintStockLast
Next element of set
Next
strCustomerNext
Previous element of set
Prev
strCustomerPrev
Lower limit of range
Min
iastrNameMin
Upper limit of range
Max
iastrNameMax
Source
Src
lngBufferSrc
Destination
Dest
lngBufferDest
展开阅读全文