1、Access 命名规则:网址:www.office-好的命名规则让你受益终生为什么在程序编写中需要遵循一个好的命名规则呢。首先,统一的命名标准能够让你的代码始终保持一致的风格,便于你自己看懂,也便于与别的开发人员交流和沟通,实际上,这些标准也是一种语言,这是你们沟通最好的媒介,有了它,你甚至不需更多的解释,对方就能看懂你的程序。1.编程老手可能会长期用隐含错误的方式编程(习惯成自然),发现毛病后都不愿相信那是真的!2.编程高手可以在某一领域写出极有水平的代码,但未必能从全局把握软件质量的方方面面。3.在团体开发中, 一个好的命名规则能够最大限度的实现程序共享, 加快开发进度。让协作者、后继者和
2、自己在现在或将来很久以后,在最短的时间内看清你的程序结构,理解你的设计思路。从而大大提高代码的可读性、可重用性、可移植性。4.通过命名注入更多的信息在源代码中,可以使你的程序易读和易于维护,减少一些隐性错误,同时大大缩短你写程序注释和程序文档的时间,因为你的命名实际上已经是一种程序注释。5.提高与 ACCESS 对象协作的能力, 包括对象的排序, 自已函数库的编写, 以及查找与替换的能力,例如你更容易把报表和窗体对象、表和查询对象分开并按照一定的规则排序。6.有利于程序编写工具的开发, 可以编写自己的加载项并遵守好的命名规则来加快程序代码的编写、排版以及自动纠错。如全局查找与替换工具、代码分析
3、与优化工具、报表自动生成工具等等。7.更易于发现代码的错误并更易于修正错误,当系统的要求实现的功越来越复杂或当代码量到达一定的规模, 不管程序员是否愿意, 出现错误几乎都是不可避免的,但如果大家都遵循一定的编程标准,则可以最大限度地降低错误出现的机率, 而且在出现错误的情况下也能迅速地发现和排除。8. 长期遵循一个好的命名规则能让你长期稳定地编写高质量、高效率和更大型的程序。LNC for Microsoft Access 命名规则简介:LNC 即 Leszynski Naming Convention, 原来在The Leszinski/Reddick Guidelines for Acce
4、ss 1.x, 2.x这本白皮书中由 Stan Leszynski 和 Greg Reddick 推荐使用的命名规则, LNC 开始于 Access 1.0 这个版本, 后来随着 ACCESS 版本的升级,这个命名规则就被迅速传播开来, 在当今 ACCESS 和 VB 开发者和开发团体中, 它已经成为事实中的命名标准, 在国外已经广泛被使用,并被微软推荐使用, 它规范了从 ACCESS 数据库设计、窗体与报表的设计以及程序的编写一整套完整且易用的命名标准, 我看过国内许多 VB 和 ACCESS 源程序, 但很少人, 特别在 ACCESS 程序员中, 注意到命名规则并遵循某种命名约定, 这给程
5、序交流造成了很大的困难, 同时, 由于程序员自己没有一套标准的命名规则, 在编写过程中随意命名, 随着时间的推移, 自已都难以阅读和修改以前的程序源码。 LNC for Microsoft Access 详解:LNC 命名规则分为两个级别,级别 1 是比较容易理解的,但级别 2 对对象进行了更严格的划分,级别 1 更多地适合初级程序员,而级别 2 则更适合于一些有经验的开发者,或在一些非常复杂或多层结构的系统开发中使用,你应该根据你自己的经验和习惯来选择更适合你的命名规则级别。请注意,不是命名规则的所有部分都分为两个级别,而只是在某些部分有所不同LNC 命名规则是基于匈牙利命名法,为什么叫匈牙
6、利命名法呢,主要是取自于作者的国籍,它的作者 Charles Simonyi ,也曾经使用过 ACCESS 的早期版本。匈牙利命名法是在他的博士论文中提到的。匈牙利命名法的一些基本原理在 Visual Basic 的说明手册和一些开发文档中都会被提及到,微软内部也是使用匈牙利命名法,在世界上,已经有非常多的程序员在使用这个命名法,LNC 命名规则实际上是将匈牙利命名法应用到 ACCESS 上, 并特别针对 ACCESS一些特征进行了一些完善。LNC 命名规则提倡所有的对象的名称均由下面四个部分组成:一个或多个前缀、一个标记符、基本名字、限定词prefixestagBasenameQualifi
7、er 注: 里的内容表示为可选内容。标记符是必须的内容,但一般情况下,你都需要一个基本名字来准确描述你的变量的实际功能,以用来区分同类型的不同意义的变量。如果你仅仅使用一个标记符来标记一个变量,那么就比较难以分辨不同的变量,但有一种情况除外,那就是你传一个对象参数给另一个函数时,可以不需要指定基本名字,例如你需要传递一个窗体对象给一个初始化窗体颜色的函数,那么这个作为参数传递的窗体对象实际上是作为一种通用的窗体对象,所以你不必为它指定一个具体的名字,而直接使用标记符即可。下面举出几个简单的例子:名称 前缀 标记符 基本名字 限定符 备注tblCustomer tbl Customer 客户表a
8、intPartNum a int PartNum 零件号数组strCustNamePrev str CustName Prev 原来的客户名前缀和标记符总是小写的,这样当我们的眼光扫过对象名称时,目光就会停留在以大写字母开头的基本名字上面,这样提高了名称的可读性,基本名字和限定符都是以大写字母开头的。基本名字简洁地描述了这个对象的意义,而非描述它的类别,例如在查询 qryPartNum 这个名称中,PartNum 就是基本名字,它是 “Part Number”的缩写,对象的标记符应该是简单且易记忆的,而前缀是放在对象名和标记符之前,用来提供更多或额外的信息,例如数字对象intPartNum 前
9、加个 a, 代表这个零件号数组,即 aintPartNum,更进一步,如果我们需要一个变量来指定 aintPartNum 这个数组的索引,那需要在这个数组的前面再加一个前缀 I,那这个变量的名称应该是 iaintPartNum。当然,你会发现,如果严格按照上述的规范来命名你所有的对象,需要你付出更多的努力并增加你现有的工作量,但如果一年后让你重新来修改下面这两种风格的代码,你会觉得哪种更易于修改和更易于重用呢。第一种风格:Z = Y(X)第二种风格:intPart = aintPartNum(iaintPartNum)对象限定符是在基本名字后面再加一个符号以更具体阐明这个对象,我们还是以前面的
10、iaintPartNum 为例,如果你想为这个数组保存两个索引号,一个是第一个索引号,一个是最后一个索引号,在 iaintPartNum 加上限定符就变成了 iaintPartNumFirst 和 iaintPartNumLast命名数据库对象:数据库对象(表、查询、窗体、报表、宏、模块)是在 ACCESS 应用程序中经常被引用的对象,它们会出现在宏、VBA 代码和属性中,所以如何对它们正确命名是非常重要的。微软所带的 Northwind 数据库例程以及微 ACCESS 手册中允许对象名中存在空格,但我们不建议这种命名风格,在许多数据库引擎和编程语言中,包括 ACCESS BASIC,空格是一
11、种分隔符,它不是对象名称的一个逻辑部分,而且,在许多数据库平台中包括微软的 SQL SERVER 数据库和 WORD 文字处理程序,带有空格的名称是不能工作的。相反,使用一种大小写混合的方式来指定名称,例如:tblAccountsPayable,如果一定要使用空格,那就用下划线“_”来取代它。对 LNC 命名规则中,所有数据容器对象都有一个标记符,在对象名称前面加上标记符对非编程人员来说可以不会增加太多可读性,但对于编程新手来说,当他们需要在报表精灵的数据源列表框或一个窗体的控件源选择一个表或查询时,添加标记符会带来很大帮助,因为 ACCESS会把表和查询不加分别地放在一个长列表里。下面是级别
12、 1 的数据库容器对象的标记符:对象 标记符 例子Table tbl TblCustomerQuery qry qryOverAchieverForm frm FrmCustomerReport rpt rptInsuranceValueMacro mcr mcrUpdateInventoryModule bas BasBilling在级别 1, 数据库容器对象唯一需要的一个限定符就是 Sub, 它是放在那些子窗体或子报表的窗体名的后面. 例如窗体 frmProductSupplier 拥有一个相关的子窗体 frmProductSupplierSub. 这样,一旦排序时,对象和它的子对象就会顺
13、序排在一起。下面是级别 2 的数据库容器对象的标记符:对象 标记符 例子Table tbl tblCustomerTable (lookup) tlkp tlkpShipperQuery (select) qry (or qsel) qryOverAchieverQuery (append) qapp qappNewProductQuery (crosstab) qxtb qxtbRegionSalesQuery (data definition) qddl qddlAddWorkColumnQuery (delete) qdel qdelOldAccountQuery (form filte
14、r) qflt qfltSalesTodayQuery (lookup) qlkp qlkpStatusQuery (make table) qmak qmakShipToQuery (pass-through) qspt qsptArchiveQuantityQuery (union) quni quniOrderDetailQuery (update) qupd qupdDiscountForm frm frmCustomerForm (dialog) fdlg fdlgLoginForm (menu) fmnu fmnuUtilityForm (message) fmsg fmsgWai
15、tForm (subform) fsub fsubOrderReport rpt rptInsuranceValueReport (subreport) rsub rsubOrderMacro mcr mcrUpdateInventoryMacro (for form) mformname mfrmCustomerMacro (menu) mmnu mmnuEntryFormFileMacro (for report) mrptname mrptInsuranceValueModule bas basBilling如果使用级别 2 的命名规则,则在数据库容器里排序时,有着类似功能的对象会排在一
16、起,当你的应用越来越大时,在你的数据库系统中可能会包含 100 个窗体或者更多,而其中 30 个窗体是用来显示消息用的,如果有一天,你需要将这个消息窗体里面的文本框的文字由黑色全部改成红色,你必须逐一打开每个窗体确定它是否消息窗体然后再修改文本框的颜色,但如果你把它们的名称设为包含同样的标记符 fmsg, 那么排序时它们会排在一起,那你修改的时候就不必一个一个去筛选了,大大节约了你修改时间。请小心仔细地选择表的名称,因为改变 ACCESS 对象的名称并不会自动应用到整个数据库,所以当在 ACCESS 对象创建时给它正确命名是非常重要的。例如,在以后的开发过程中如果需要改变表的名称,你可需要改变
17、所有引用到到这个表名的表、查询、窗体、报表、宏和模块中引用到到这个表名,虽然,有一些辅助工具可以帮你减轻一些工作量,但最好还是在一开始就给它正确地命名。你可能希望引用了一个表的每个数据对象都有一个与表名一样的基本名字,而使用相应的标记符来区分它们,例如,你的表名是 tblCustomer,它的主窗体名应该是 frmCustomer,它的主报表名应该是 rptCustomer,而引发相关这些事件的宏名应该是 mfrmCustomer 和mrptCustomer,我们也建议表的名称不宜用复数形式,例如使用 tblCustomers,因为一个表通常都是包含多条记录的,这暗示它本身就是复数的。数据库对
18、象前缀? 我们使用四种数据库对象前缀: ?“zz“表示那些你已经废弃的但是可能想要在数据库中将来作为参考或保存使用的对象 (举例来说,zzfrmPhoneList). “zz“将导致对象名称排在数据库容器的底部,这样,它就会放在一个不显眼的地方,但它仍然是有效的。? “zt“表示一些临时的对象 (举例来说 ,ztqryTest). 1“zs“表示系统对象 (举例来说,zstblObjects). 系统对象是那些不被最终用户使用的那些有关系统开发和维护方面的对象,例如错误日志,开发注解,文档,关联信息等等. (注意 “zs“ 是前缀.这样系统对象就会尽量排在数据库容器的底部). “_“ 来表示那
19、些正在开发中的对象 (举例来说,_mcrNewEmployee). 一个对象名字前面加上下划线可使它排在数据库容器的顶端,提醒你它需要注意. 当这个对象已经全部完成后 ,除去下划线,它将会正常地排序. 字段标志符在字段上使用标志符一直是一个争议的话题,甚至在这个文章的作家之间也存在不同的见解. Greg 主张字段标志符也应该统一使用与其它 ACCESS 数据对象及 VBA 中使用的一样的命名规则 ,而 Stan 则更喜欢使用一种与平台和数据类型无关的命名方式,即字段名称不需要加字与字段类型相关的标志符,这样有助于数据库移植和相互连通。考虑到两者的立场,连同你自己的需求,你们可以选择在命名时是否
20、加入下表这些标志符:数据类型 标志符 例子Binary Bin binInternalByte Byt bytFloorNumCounter Lng lngPKCntCurrency Cur curSalaryDate/Time Dtm dtmHireDateDouble dbl dblMassInteger int (C programmers may prefer “w“)intUnitLong lng (C programmers may prefer “dw“)lngPopulationMemo mem memCommentsOle ole oleEmpPhotoSingle sng
21、(Some users find “sgl“ more mnemonic )sngScoreText str (Used as opposed to “txt“ because a textbox control uses “txt“. C programmers may prefer “sz“)strFirstNameYes/No ysn (C programmers may prefer “f“)ysnDiscounted? 注意: 2ACCESS 引擎 (“jet“) 支持二进制的数据类型,但它并没有对用户开放这种功能,但是你可以通过汇入或链接到外部表来实现这种数据类型,而且,一些系统表
22、也使用这种数据类型命名。3在 ACCESS 内部,自动编号数据类型是当作是一种长整型来对待,只是增加了一个 auto-increment 的特殊属性,而自动编号字段经常会作为外键被其它表引用,所以 Greg 使用了与长整型同样的标记符,但如果你想区分长整型与自动编号类型,则可以在对象名称最后加上 Cnt 限定符4标签控件对象当你创建一个新的绑定控件时,窗体或报表会自动分配字段的名称给这个控件名称,控件与字段使用相同的名称会导致命名的混乱,特别你在 VBA 代码中同时引用到字段和控件,有时会导致一些错误,为避免这种情况,需要在控件名称前面加上标记符,例如一个文本框控件,它的控件来源是 Custo
23、mer,那么我们给它取的名称就是 txtCustomer.在级别 1 中,使用者只是想区分活动控件和标签,对不太关心控件的类型,这样,控件的标记符就如下所示:Object Tag ExampleLabel lbl lblLastNameOther types ctl ctlLastName级别 1 描述了了控件之间一个很小的差异性的,不过,它在函数、宏或程序文档还是非常有用的,例如,通过它可以区别哪些控件是属于标签,那些是其它控件,其中前者是不可修改的,而后者则可从用户输入或代码中接受值级别 2 指明了窗体或报表中控件的类型,这样 VBA 代码或宏更容易区分这些控件的属性和事件对象 标记符 例
24、子Chart (graph) cht chtSalesCheck box chk chkReadOnlyCombo box cbo cboIndustryCommand button cmd cmdCancelFrame (object) fra fraPhotoLabel lbl lblHelpMessageLine lin linVerticalList box lst lstPolicyCodeOption button opt optFrenchOption group grp grpLanguagePage break brk brkPage1Rectangle (Visual Ba
25、sic uses the term “shape“)shp shpNamePanelSubform/report sub subContactText box txt txtLoginNameToggle button tgl tglForm对控件来说,唯五的前缀就是 “zs”,它只出现在级别 2 中,它表明这是一个系统控件,只被窗体或代码使用,而不对用户开放,例如有些控件在运行时是不可见的,但它可能用来存储一些临时值或传递参数给窗体唯一的前缀为控制, “zs“,出现在水平 2. 它指示系统- 水平被形式用或编码的控制但是不对使用者显示. 如此的控制通常不对感到看得见的跑计时但是他们可能储存暂
26、时的价值,否则叁数传给形式.命名代码或宏中的对象:使用标准的描述性强的变量、常量、和函数名可大大增强代码的共享、维护、和联接的能力1. 变量的标记符每个变量都应有一个如下表所示的标记符变量类型 标记符 例子Container con Dim conTables as ContainerControl ctl Dim ctlVapor As ControlCurrency cur Dim curSalary As CurrencyDatabase db Dim dbCurrent As DatabaseDocument doc Dim docRelationships as DocumentDo
27、uble dbl Dim dblPi As DoubleDynaset dyn Dim dynTransact As DynasetFlag (Y/N, T/F) f Dim fAbort As IntegerField fld Dim fldLastName as FieldForm frm Dim frmGetUser As FormGroup gru Dim gruManagers as GroupIndex idx Dim idxOrderId as IndexInteger int Dim intRetValue As IntegerLong lng Dim lngParam As
28、LongObject obj Dim objGraph As ObjectParameter prm Dim prmBeginDate as ParameterProperty prp Dim prpUserDefined as PropertyQueryDef qdf (or qrd) Dim qdfPrice As QueryDefRecordset rec (or rst) Dim recPeople as RecordsetRelation rel Dim relOrderItems as RelationReport rpt Dim rptYTDSales As ReportSing
29、le sng Dim sngLoadFactor As SingleSnapshot snp Dim snpParts As SnapshotString str Dim strUserName As StringTable tbl Dim tblVendor As TableTableDef tdf (or tbd) Dim tdfBooking as TableDefType (user-defined) typ Dim typPartRecord As mtPART_RECORDUser usr Dim usrJoe as UserVariant var Dim varInput As
30、VariantWorkspace wrk (or wsp) Dim wrkPrimary as WorkspaceYes/No18 ysn Dim ysnPaid As Integer在我们的命名方式中,不使用$ 和 %这些数据类型前缀,因为在 ACCESS 和 Visual basic 的文档中是不推荐使用这些前缀的象窗体和报表这样的数据库对象变量的标记符是与数据库对象的标记符是一样的,这样命名有助于编程,因为通常你分配给一个变量的名称(如 tblVendor)与它所引用的对象(tblVendor)有同样的名称,这样就会在编程中提供统一的对象2. 常量和自定义数据类型使用大写名字作为常量,这
31、是 WINDOWS 编程的一种习惯,3. 范围前缀命名级别 2 中引入了变量和常量的范围前缀的概念,范围放在其它所有前缀的前面 局部定义的变量没有前缀 局部定义的静态变量前缀为 “s“, 例如 “sintAccumulate“. 在模块声明节里(或窗体代码)定义的变量使用 m 作为前缀,例如 “mcurRunningSum“. 使用 Global 定义的全局变量使用前缀 “g“, 例如 “glngGrandTotal“. 作为函数或子程序参数传递的变量 (函数名称后面的圆括号里 ) 使用前缀 “p“, 例如 “pstrLastName“. 另外, 当在一个函数定义部分形参和值参都存在时,我们有
32、时也使用 “r“ 而不是 “p“ 来指明是形参 , 用 “v“ 来指明是值参,。对象名称后面的限定符进一步区分那些意义很接近的对象. 你可能已经针对各类应用设计了自己的一系列限定符,不过,下表中有些通用的限定符变量属性 限定符 例子Current element of set Cur iaintCurFirst element of set First iaintStockFirstLast element of set Last iaintStockLastNext element of set Next strCustomerNextPrevious element of set Prev strCustomerPrevLower limit of range Min iastrNameMinUpper limit of range Max iastrNameMaxSource Src lngBufferSrcDestination Dest lngBufferDest