最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

access数据库教程大全

IT圈 admin 31浏览 0评论

2024年2月28日发(作者:弘英彦)

    本文由lisongjia123贡献    doc1。    第 1 章 Access 开发平台概述 1.1 Access 开发平台是什么? Access 开发平台是 Access 开发利器,Access 开发平台专业版是免费的。 Access 开发平台(又称 UMV 开发平台)是由上海盟威软件有限公司研发的一款开发平台,该平台集成了大量的常用功能模块,可以让 Access 开发人员降低开发难度、节省开发时间,以最快的时间让软件投入实际应用中,最终达到以下三大目标: 一是协助单位把适合自身企业的管理思想通过计算机系统得以实际的应用,摆脱对特定软件公司的依赖、降低企业的经营成本,提高企业 的灵活应变能力; 二是协助个人从管理人才向“精管理,懂编程”的复合型人才的转型; 三是协助个人提高自身的素质与职业竞争力,提升自己的职业素养和信息数据的处理能力。 1.2 Access 开发平台可用来做什么? 1.2.1 中小企业老板 采用 Access 开发平台,艾盟威软件公司将为您的公司培养开发人员,由贵公司开发人员来开发公司软件,可以达到低成本、可持续性 改进的作用,摆脱对特定软件公司的依赖。(适于广大中小企业老板) 1.2.2 经理人员 采用 Access 开发平台,艾盟威软件公司将为您的部门培养开发人员 1 名(或者您自已),由贵部门开发人员或您来开发本部门用软件, 可以达到低成本、可持续性改进的作用,从而实现本部门信息化,让您的部门走在其它部门的前面,实现您的管理思路,提高工作效率。(适 于大中型企事业单位的中层干部) 1.2.3 科室人员 采用 Access 开发平台,您可以将您所熟悉的业务开发成软件,让领导、同事共享信息,提高工作效率,从而获得领导赞赏、同事的尊 重,提高职业竞争力。(适于大中型企事业单位的科室人员,如计划员、市场分析员、生产销售管理人员、统计员、会计等,包括所有经常 使用 EXCEL 来处理工作的人员) 1.2.4 IT 人员 采用 Access 开发平台,您可以为单位开发软件,从而获得领导赞赏、同事的尊重,提高职业竞争力。(适于大中型企事业单位的 IT 人 员,如网络管理员、IT 维护人员等) 1.2.5 学生 掌握一项上面四种人士都要掌握的技能,现在就投入时间学习并掌握它,可以为将来的职业发展打下良好的基础。 1.3 Access 开发平台如何使用? 1.3.1 个人自学 自学不会涉及到艾盟威软件公司的任何精力,所以可以免费学习这项技能,在自学过程中可利用的免费资源有: 1. 报销案例教程 2. Access 软件网论坛,网址为:http://www.accessoft.com 1.3.2 参加培训 参加培训会得到培训资源和艾盟威软件公司工程师的帮助,培训需要交纳培训费用,详见培训招生简章,网址: http://www.umvps.com/Training.asp。 培训资源为:微软最有价值专家讲师、培训专用论坛、培训专用 QQ 群、即时在线技术支持等。 1.3.3 自学与培训的区别 培训与自学相比,参加培训解决了两个问题:一是可得到有经验的老师对您的学习进行合理规划;二是学习过程中碰到困难可以立即得 到解决。 参加培训的优点是节省学习时间成本,自学的优点是节省培训费用。 1.4Access 开发平台可行性分析 1.4.1 Access 开发平台概述 ACCESS 开发平台是一个基于 Access 开发的计算机编程开发工具,使用这个工具可以让非计算机专业人员经过短期培训后,可以非常 容易地开发出专业、实用的管理软件;计算机专业人员经过培训后,可以大大降低软件的开发时间成本,缩短开发周期。最终达到以下三大 目标:    一是协助单位把适合自身企业的管理思想通过计算机系统得以实际的应用,摆脱对特定软件公司的依赖、降低企业的经营成本,提高企业 的灵活应变能力; 二是协助个人从管理人才向“精管理,懂编程”的复合型人才的转型; 三协助个人提高自身的素质与职业竞争力,提升自己的职业素养和信息数据的处理能力。 ACCESS 开发平台的实际需求在哪里呢? (一) 当前广大企事业单位中,各类管理人员(包括和数据打交道的人士)在广泛地使用 EXCEL 等软件来处理日常工作,统计数据、制作 报表。然而,随着管理的深入,EXCEL 电子表格软件并不能很好的满足管理的需要,管理人员对工作效率提出了更高的要求,他们需要适 合自已管理需要的特定的软件来达到特定的目标,而各类软件公司由于在软件费用、灵活度、及时性、实用性等方面很多时候都无法满足这 些需求; (二) 大量的中小型企业,由于经费有限,也无法进行或者不愿意进行大规模的信息化建设投入; (三) 由于当前学校的体制问题,大量的计算机专业和非专业人员,并没有实际掌握一种成熟的软件设计能力; (四) 信息化时代的大量个人,对于繁杂的个人信息无法协调很好的协调处理,而从经济的角度来考虑,不太可能去大量订购各类信息系 统用于数据处理。 以上的四条信息表明,人们对一page 1

种易用的、强大的、廉价的开发工具的需求,是多么的迫切——易用的、强大的、廉价的这三个条件,缺 一不可,这样的工具存在吗? ACCESS 开发平台就是这样的一个开发工具, 它的问世, 将为众多的计算机的和非计算机的专业人员带来福音、 将为中国的信息化建设, 做出自己的贡献。    1.4.2 ACCESS 开发平台简介 一、Access 简介 Access 是微软 Office 办公套件中一个极为重要的组成部分。 起初 Access 是一个单独的产品, 后来微软发现如果将 Access 捆绑在 office 中一起发售, 将会带来更加可观的利润, 于是 Access 第一次出现在 office97 中, 成为 office 套件中的一个重要成员。 现在它已经成为 Office 办公套件中一个不可或缺的部件——截止到 2005 年 7 月,微软的 Office 已经出售超过四亿套,而在 2005 年国内办公软件市场的数据统 计中,微软 Office 市场占有率最高,达到 71.22%,而据美国一家独立研究机构统计,微软 Office 的市场占有率在 90%以上——由此可 见 Access 的普及之广,现有用户群之庞大。 由于微软公司持续投入大量人力和资金进行技术改进和创新,因而 Access 的新版本功能已经变得越来越强大——随着版本的升级, Access 的使用也变得越来越容易。以往很繁琐的工作现在只需几个很简单的步骤就可以高质量地完成了。 一些不了解 Access 的人士误以为 Access 只能用来做数据存储,其实 Access 不但可以用来做数据存储,还具有非常强大的开发能力, 利用各种控件和 VBA 语言,能开发出功能十分强大的软件系统,与此同时,其廉价、易用的特性更是其他任何开发工具所不能比拟的—— 因此,人们可以利用它来解决大量数据的管理工作。 二、ACCESS 开发平台简介 ACCESS 开发平台是基于 Access 开发的,与 Access 相比更加易用,性价比极高的一款软件开发平台,功能强大、与时俱进,与其他 开发平台相比,更加廉价。 易用:Access 与 Excel 都是 Office 家族的成员,在众多操作方法上很相似。由于 Excel 在计算机用户中大范围普及,为这些人士学习、 掌握 Access 的开发提供了很有利的便利条件。而 ACCESS 开发平台则是基于 Access 开发的,其集成的多种常规基础系统功能,使得开发 人员只需在我们的引导下掌握非常简单的业务模块的开发技能, 就可以完成了整个软件系统的开发工作, 大幅降低了软件开发的难度与强度。 随着业务的开展,我们将基于当前的基础平台推出大量的业务平台,届时,基于 ACCESS 开发平台的软件开发将变得更加快捷和容易、成 本更低。 ACCESS 开发平台内置了以下功能: 1. 操作员登录模块:内置了与登录系统相关的一系列功能; 2. 用户管理模块:内置了用户新增、修改、删除、分组等用户管理的相关功能; 3. 权限控制模块:内置了强大而灵活的权限控制体系; 4. 数据图表分析模块:内置了强大的数据汇总统计、图表分析、趋势分析等相关功能; 5. 通用查询数据导出模块:内置了多字段多条件的通用数据查询功能;    6. 数据导出模块:内置了多格式文档数据导出功能; 7. 自定义菜单、功能按钮模块:内置了导航菜单、功能按钮的自定义设置功能; 8. 常用函数:内置了大量的实用函数供开发人员调用,大大简化了开发难度和强度; 9. 局域网联网模块:实现局域网联网,内置了自定义服务器数据库并尽可能地保障了数据安全性; 10. 互联网联网模块:实现互联网联网(企业版新功能,普及版函数较少); 11. 常规设置模块:内置了非常易用的软件开发者的信息展示界面; 12. 系统日志功能:自动记录所有用户的操作,使系统的详细使用情况,有案可查; 13. 自动升级功能:内置了多客户端使用时,一旦服务器版本更新,则其他客户端启动时自动升级的功能; 14. 主程序加密功能:系统的安全性更加有保障; 15. 数据导入功能:内置了导入按钮和导入函数,用来从 Excel 文件中导入数据; 16. 多语言版本支持:目前提供简体中文版,将陆续推出繁体中文版和英文版。 功能强大、 与时俱进: Access 利用其自带的各种控件和 VBA 语言, 可以用来开发功能十分强大的软件; 基于 Access 数据库的 ACCESS 开发平台,可以开发在企业局域网内部使用的,10 个左右客户端的小型管理系统;如果使用基于 SQL Server 数据库的 ACCESS 开发平台 企业版,则可以开发大中型管理系统。 由于我们的平台是基于 Access 开发的,而 Office 对微软是如此的重要,因此,微软每年都会持续投入大量的人力和财力进行 Office 新版本的研发,如此,则意味着 Access 的功能会变得越来越强大,而 Access 越强大,则我们的软件,功能就会越强大,也就是说,我们 的软件升级、软件功能的增强,有微软做为坚实的后盾,因此,不用担心我们的软件会有一天跟不上最新的技术步伐。 免费:ACCpage 2

ESS 开发平台专业版是免费的, ;由于 Access 只是 Office 的一个组件,而鉴于当前 Office 的强大市场占有率,因此,在大 多数场合,并没有额外增加各级用户的成本。 ACCESS 开发平台是基于 Microsoft Access 开发的,是有着深厚大型企业管理背景和微软最有价专家团队开发出来的开发平台,是一款业 务与技术相结合的平台,集成了企事业单位以及个人软件系统的常规功能并且开放业务层的源代码: 一、 Access 开发人员(适合于任何一类人员) ,可以节约大量的时间和成本,快速地开发出非常专业的软件,多方共赢,共同发展; 二、 对于既不懂软件开发又不懂 Access 的人员(适合于任何一类人员) ,通过短期的培训,或者相对培训而言较长时间的自学,就能 快速掌握实用的软件开发技能,由此可以让自身的素质有一个质的飞跃。    1.4.3 ACCESS 开发平台市场分析 (一) 当前企业信息化现状 当今中国,信息化的浪潮蓬勃发展,但是企业在应用计算机技术的过程中存在一个较大的差异性问题。一则经济发达地区和不发达地区 的差异性很大,二则由于企业经济实力的不同,中小企业和国家大企业的应用水平更是天壤之别。 企业信息化的实质就是数据化,而数据化的最佳载体,无疑就是数据库系统,因此一个企业的数据库系统的应用水平,在很大程度上反 应出该企业的信息化应用与管理水平。 (二) 当前企业软件应用选择 虽然数据化的载体,从很大程度上说就是数据库管理系统。但是数据库系统的应用存在一个选择的问题,一般有以下几个选择: 一是自主研发; 二是选择通用的产品; 三是选择定制开发; 四是在通用产品的基础上进行个性化的修改; 五是自主研发与外包相结合的方式; 六是在通用开发平台的基础上进行开发。 此外,可能还存在其他的方式,但是比例非常微小。 下面我们来逐个分析: 1. 自主研发 就自主研发来说,由于本企业的人员,在一定程度上,熟悉本企业的业务流程和实际需求,在项目的开发以及实施配合中,都具有明显 的优势,但是对一般的企业来说,自主研发也绝对是一个挑战,首先,自主研发的周期相对比较长,其次自主研发对企业的人员素质要求很    高,因为软件工程是一个系统性的工程,特别是基础架构的搭建,费时费力,麻雀虽小,五脏俱全,项目的大小与实际的开发难度,并无必 然的联系,高额的人员成本再加上比较长的项目周期,实际成本算下来,代价很是高昂,并且,后续的维护和更新也是大问题,一旦核心的 项目开发人员离职,那么,后期的维护和更新就面临很大的挑战,正是因为如此, ,通用软件开发商才大行其道,占据了很多的市场份额; 2. 选择通用产品 就通用软件来说,厂商众多,产品质量、售后服务水平也参差不齐,就一般来说,比较成熟的大型产品,一般售价适中,大约几万人民 币左右,但是却也超过了一些企业的承受能力,一些偏远地区和经济不发达的地区更是如此,由于中国地区差异性非常之大,因此,通用软 件虽然市场份额很高,却也留下了很多市场空白。就目前中国的整体信息化的水平来说,还是比较低下的,一方面是观念的问题,另一方面, 就是通用软件的相对的高价格问题。虽然说通用软件一般比较成熟,但是在某些特定的场合,通用软件却并不通用,企业不同,流程不同, 需求更是千差万别,这就造成了在很多场合,通用软件并不通用的尴尬; 3. 定制开发 正是因为通用软件并不通用的问题,才造就了相对广阔的定制开发的软件市场。定制开发市场的庞大,并不全是因为通用软件的问题, 在一定程度上由于中国 IT 发展相对滞后,通用软件系统产品不齐全的原因,毕竟通用软件多半属于行业内通用的问题。但是不管怎么说, 定制开发的市场的确不小,但是定制开发,需要一定的财力作为支撑,通常情况下,定制开发需要付出数倍数十倍于通用软件产品的费用, 此外,还要承担更多的额外的项目风险。但是同通用软件一样,大量中小企业和偏远经济欠发达地区,无法承受高额的开发费用,因此,也 留下了相当大的市场空白; 4. 在通用产品的基础进行上个性化的修改 如果说相对广阔的定制开发市场是通用软件并不通用留下的市场机遇的话,其实,通用软件并不通用也造就了另一个市场,那就是在通 用产品的基础进行个性化的修改,有一点毫无疑问,它的费用虽然一般远远低于定制开发,但是却也略高于通用软件,因此,它虽然满足的 客户的需求,但是它的局限性,虽然比纯粹的通用软件要小,但是对大量小企业和偏远经济欠发达地区,也解决不了根本问题,而这类经济 实体和非经济实体的数量,则是远远超过中大型企业,量变必然导致质变,市场规模,不容忽视; 5. 自主研发与外包相结合 还有一种方式,那就是自主研发与外page 3

包相结合的方式,这种方式的风险很大,后期维护升级也是很大的麻烦,开支一般也比直接部署通 用软件要高,因此,此外,还存在责任不清的问题,出了问题,容易互相推委责任; 6. 通用开发平台 随着软件应用技术的发展,一种全新的开发方式最近越来越广泛的使用,那就是基于通用开发平台的开发。这种方式,虽然在某种意义 上说属于定制开发,但是却非常的高效,毕竟不同于普通的全新定制开发,但是,就目前来说,基于通用平台的开发方式,虽然降低了软件 公司的门槛,但是对于用户来说,仍然属于中高端市场,特别这类软件的收费仍然很高,因此也不具备大众化的基础。    1.4.4 ACCESS 开发平台的优势 第一,易用。 Access 的易用是众所周知的, 而基于 Access 开发的 ACCESS 开发平台的易用性更是有了很大的提高——由于 ACCESS 开发平台集成 了 Access 最难开发的基础平台,包括灵活的权限体系、强大的数据分析功能、灵活的查询和数据导出功能、灵活的用户管理、自动升级、 局域网联网等功能,如此一来,则在微软本来就很具有竞争力的易用性方面,更进了一步,更加重要的是,不但解决了传统的大批 Access 开发者,难以解决的专业化的难题,而且,更为他们节省了大量的时间,降低了软件的开发成本。由于 ACCESS 开发平台卓越的易用性, 因此,部署了 ACCESS 开发平台并无后顾之忧: 1. 由于 ACCESS 开发平台易用性是卓越的,因此,各个单位可以派遣专业的或者非专业的人员参加本公司的培训,即可获得详尽的学 习资料,通过短期的培训和学习,即可快速获得实用、专业的软件开发能力,从而为本公司节省了大量的信息化资金; 2. 由于我们开放业务源代码,各单位可以自己随业务的进展自由更新软件以适用自己的实际工作需求,更加及时、灵活,并且,与传统 方式相比,不需要大量的后期维护的资金投入,从而节省了大量的信息化资金; 3. 由于 ACCESS 开发平台的易用性,使企业既不依赖于特定的软件公司,又不依赖于特定的个人,确保开发、更新、维护等无后顾之 忧,降低了企业的经营风险。 第二,功能强大,与时俱进。 很多人都误以为 Access 只能用来做数据存储,其实 Access 不但能用来做数据存储,还具有非常强大的前台开发能力,利用各种控件 和 VBA 语言,能开发出功能十分强大的软件系统。此外,我们都知道微软虽然产品很多,但是 Office 却占了其收入的很大比例,微软内部    每年都对 Office 投入了大量的人力和资金进行研发,因此,可以预计,Access 的功能,会紧跟时代的步伐,确保其满足最新的技术需求, 而我们的平台是基于 Access 开发的,如此,则意味着 Access 越强大,则我们的软件,功能就会越强大,也就是说,我们的软件升级、软 件功能的增强,有微软作为坚实的后盾,因此,不用担心我们的软件会有一天跟不上最新的技术步伐。 第三,专业版免费。 就中国的国情来说,毕竟经济实力强、技术实力强的公司企业只占很少的比例,真正的绝对多数是那些经济实力薄弱、技术力量薄弱的 广大的中小公司企业,如果不廉价,就不可能具有最广阔的市场——量变必然形成质变,与此同时,广大的中小经济薄弱的公司也将因此而 受益: 1.ACCESS 开发平台专业版是免费的; 2.功能更为强大的 ACCESS 开发平台企业版,支持 SQL Server 数据库; 3.由于 Office 的强大占有率,因此,在大多数场合,并没有额外增加用户成本;如果使用 Office 开发版打包,则 ACCESS 开发平台不 需要安装 Access 也可以运行。    1.4.5 可行性总结 由以上分析与介绍可知,使用 ACCESS 开发平台进行软件开发,无论是计算机专业人员还是非计算机专业人员,无论是企业还是个人, 的确是可行的。或许有人对自己的技术没有信心,没关系,一方面可以参加我们的培训,一方面可以从我们当地的认证工程师寻求技术支持 ——如果当地尚未有企业合作伙伴和认证工程师产生,那么,可以从我们公司寻求技术支持,确保用户在软件的使用过程中无后顾之忧。随 着时间的推移,经验的增长,必将为个人带来良好的经济收益和更加优良的发展空间。 第二章 说明与准备工作 2.1 阅读提示 请注意,本教程是严格按照正常使用 Access 开发平台的所必须的知识要素,按正常顺序编写的,请按顺序阅读,否则,会给您的学习 带来困难,所以严格按顺序进行学习是必须的,这样可以节省您学习与掌握它的时间。 2.2 学习使用开发平台的前提条件 第一:基本了解 Access 的数据类型; 第二:基本了解 Access 的表、查询、窗体、报表; 第三:了解 Access 的窗体的常用控件和相关属性; 即使您对以上都不了解,或者根本就不懂 Access ,则可以随意在市面上选购几本通俗的 Access 教程,对着教程做试验,快则page 4

一两 个月,慢则 3-6 个月,您一定能具备学习使用 Access 开发平台的前提条件。 2.3 默认密码与用户名 出于安全的需要,在您使用的 Access 开发平台的过程中,经常会被要求输入密码或帐号,在本系统中,默认密码都是 admin (可以 独立修改) ,默认帐号是:工号: 000001 ,密码: admin 。 2.4 Access 开发平台的版本 当前, Access 开发平台一共两个版本:专业版和企业版,本教程出于普及的目的,是基于专业版制作的。 2.5 Access 开发平台的运行环境 本软件是基于微软的 Offices 套件的 Access 开发的,因此,必须确保您的计算机上安装有 Offices 组件中的 Access 应用程序 , 并且,版本必须是 Offices 2000 或者 Offices 2000 以上,如果是 Offices 2003 ,那么,有的用户启动应用程序时可能会显示如下界 面:    此时请点击取消 (C) 按钮,之后关闭应用程序,并按以下路径定位:开始→程序→Microsoft Office→ Microsoft Offices Access 2003    打开 Access 2003 以后,按以下路径定位:工具→宏→安全性(亦可以在之前单击取消 (C) 按钮之后立即按照这个路径定位) ,如 下图所示:    单击安全性之后,在“安全级 (S) ”选项页,将“中”更改为“低”,如下图示:    单击“确认”按钮,之后在弹出的确认对话框中单击“是 (Y) ”按钮,确认修改,如下图所示:    确认之后,关闭 Access 2003 。 此时,重新启动应用程序,将一切正常。本软件现有功能确保不会对您的系统造成任何伤害。 2.6 建立项目文件夹 正常情况下,您获得的软件包是一个名称为 accdev.rar 的文件,该软件包是采用 WinRAR 软件压缩而成,因此,在使用之前请使用 该软件将本软件解压缩(如果您的计算机上没有安装 WinRAR 软件,请通过正当的途径获得该软件的评估版,或者向比特瑞旺集团软件事 业部申购该软件) ,操作步骤如下: 选中名称为 accdev.rar 的文件,单击右键激活鼠标右键命令快捷菜单,选择解压到当前文件夹 (X) 命令,如下图所示:    执行解压到当前文件夹 (X) 命令之后,会在当前目录生成一个名称为 AccDev 的文件夹,该文件夹即是解压缩完成可以正常使用的全 部软件文件,如下图所示:    用鼠标选中 AccDev 文件夹,双击鼠标左键打开该文件夹,如下图所示:    请注意,该文件夹的所有文件,都是本软件运行所必需的,切不可以随意删除,否则会造成本软件运行异常。下面就简略介绍一下该文件 夹内的文件组织情况: AccDev_be.mdbAccess 开发平台后台数据库文件 AccDev.mdb Access 开发平台前台客户端文件 menuPics 文件夹用于存放 Access 开发平台里用到的图标 Acchelp.umv Access 开发平台系统文件 umv.ICO Data.mdb Access 开发平台系统文件 Access 开发平台系统文件    lsys100.cfg Cursor.cur login.mde    Access 开发平台系统文件 Access 开发平台系统文件 Access 开发平台系统文件    MSCOMCT2.OCX Access 开发平台系统文件 MSCOMCTL.OCX Access 开发平台系统文件 注册控件.bat 用于注册平台里用到的控件,在遇到控件未注册的情况下可以修复部分 Access 开发平台的运行故障 。 Accdev 文件夹内除了 AccDev_be.mdb 和 AccDev.mdb 两个文件会在您开发过程中频繁使用, 其他的 ACCESS 开发平台系统文 件,都将不会在开发过程中有所涉及或者很少涉及,但是却是系统运行所必需的,请保证它们的完整性和目录一致性。 AccDev 这个文件夹的名字,是系统默认的,如果您开始基于 Access 开发平台开发您的系统,那么,可以将该文件夹重命名为一个有 意义的名字。在这里,我将以一个简略的报销管理系统的开发过程来向各位介绍 Access 开发平台的使用方法,因此,在这里我将这个文件 夹命名为 BXMIS (BaoXiao Management Information System ) ,其操作步骤如下: 单击向上按钮,退出该文件夹回到上一级,之后选中 AccDev 文件夹,单击鼠标右键激活鼠标右键快捷菜单,选择重命名 (M) 右键菜 单,如下图所示:    或者选中 AccDev 文件夹后按下键盘上的 F2 键(重命名命令的系统快捷键) ,此时,该文件夹的名称将会高亮显示,此刻再次单击右 键选择删除命令,或者按键盘上的 Delete 键,删除该文件夹的名称,之后重新输入该文件夹的名称: BXMIS 。 之后再次在该目录空白处单击鼠标右键,激活鼠标右键菜单,选择新建 (W) 菜单下page 5

的文件夹 (F) 命令,如下图所示:    之后将新建的文件夹命名为:报销管理系统,之后将 BXMIS 文件夹移动到报销管理系统内部,完成之后如下图所示:    在此说明一下,在本例中,报销管理系统目录将存放整个项目的相关文件,比如需求设计说明书、功能设计说明书、表设计说明书、程 序文件等,而 BXMIS 目录则只存放原本的那些系统文件和数据库相关文件。 第三章 表设计 3.1 建表说明 就从基于 Access 开发平台开发的角度来说,第一步工作就是要在后台数据库中建表,但是就从完整的系统开发角度来说,在正式建表之 前,还有太多工作要做,比如,考察项目是否可行,需求调研,框架设计,功能设计、表设计等,由于我们在这里,是介绍 Access 开发平 台的使用,并非是对整个软件开发流程的介绍,因此,我们假使此项目可行,并且,您已经完成了需求调研、框架设计和功能设计。出于方 便读者的目的,这里附上相关的文件,下载地址: http://www.umvps.com/umv/bxDoc.rar (即下图中 3 个 Word 文件),如下图所示:    在这里,我们将从表的设计开始介绍。 关于表的设计, 有专业的设计工具, 但是我们推荐比较廉价的做法是这样的: 先在电子表格中 (比如 Microsoft Excel 、 金山的 WPS ) 规划主要的表组成(不含参数表) 、各个主表的字段分布和大致的数据类型,之后在字处理软件(比如写字板、 Microsoft Word 、金山的 WPS )中书写详细的表设计说明书。在此请注意以下几点:最好是在确认表设计说明书之后再开始在数据库中建表,否则如果事后发现设 计失误,将会造成比较大的时间浪费,在这里,有必要特别强调一下,表设计的好坏,直接关系到项目的质量和成败——关于表设计的相关 主题,一方面需要经验的积累,一方面需要熟练掌握表设计的相关理论和原则,在这方面,读者可以参阅相关资料。 当然,对初学者来说,无法精确掌控表设计,那么,您就可以事先按照您自己的思路来走,慢慢在实践中积累经验。在此我提醒大家一 点,请重视理论的作用,无论是设计还是开发。虽然实际的开发经验是重要的,但是如果你不熟悉理论的话,你可能会重犯很多前人的错误, 并且,在理论结合实际的开发活动中,无论是您的创造能力、开发效率、还是发展前途,都要比不懂理论的人要强的多。 3.2 建表 现在我们已经完成了准备工作,可以开始正式在 Access 开发平台后台数据库文件中建表了。之前提到 AccDev_be.mdb 文件是 Access 开发平台后台数据库文件,恐怕有些人会有疑惑的,是的,我们现在就来还原这个数据文件本来的面目。 按下列路径定位:开始,控制面板,文件夹选项,查看选项卡,请确认在高级设置选项区内“隐藏已知文件类型的扩展名”的选项并未被 选中,如下图所示:    双击 AccDev_be.mdb ,如下图所示:    本系统默认的密码是 admin ,当然,是可以修改的,确认之后,就可以按照数据库表设计文档开始新建表了,新建表的时候有几点请 注意: 第一:严格保证实际的表结构和文档的一致性,如果您在新建表中或者之后更改了表设计,那么,请保证文档和实际的结构的一致性, 因为是在实际的开发过程之中你很可能频繁地查阅该文挡; 第二:不要遗漏任何扩展属性,比如,是否为空,主键等,同样,也要保证实际的扩展属性和文档的一致性。 为了便于查看和管理,可以选中新建的表,之后单击右键激活右键快捷命令菜单,执行属性 (P) 命令,如下图所示:    之后在表属性对话框的说明文本框中输入该表的中文名称,如下图所示:    本示例中所有的表都新建并添加中文说明之后,如下图所示:    请注意一点, 为了能很好的区分我们的系统表和您建的用户表,以方便后期的工作,请将您建的表以 tbl 或者以 tbl_ 作为表名的前缀。 3.3 更改后台数据库的保护密码 如果你不想采用默认的后台数据库保护密码,那么,你可以更换密码,需要说明的是,在 Access 中,不能直接更换密码,必须先撤消 数据库密码,之后再重新设置数据库密码。如果你在正常登录系统的情况下企图撤消数据库密码,那么,将会出现如下错误提示:    正确确的更改后台数据库保护密码的步骤如下: 第一:按以下路径定位:开始→程序→Microsoft Office→Microsoft Offices Access 2003 ,如下图所示:    第二: 打开 Access 2003 以后,按以下路径定位: 文件 (F) ,打开 (O) ,如下图所示:page 6

    在打开对话框中, 浏览定位到要更改数据库保护密码的后台数据库文件, 之后在单击打开按钮后面的小三角, 选择以“独占方式打开 (V) ” 命令,如下图所示:    之后在要求输入密码对话框中输入现有的密码,打开后台数据库文件之后,按以下路径定位:工具 (T) ,安全 (T) ,撤消数据库密码 (D) ,如下图所示:    执行撤消数据库密码 (D) 命令之后,在弹出的撤消数据库密码对话框中输入原密码(原密码为: admin),如下图所示:    单击确定按钮确认撤消操作,之后再按如下路径定位:工具 (T) →安全 (T)→设置数据库密码 (D) ,如下图所示(请注意,刚才的撤 消数据库密码 (D) 已经变成了设置数据库密码 (D) ,可以通过这个命令菜单查看当前的数据库是否存在数据库密码) :    执行设置数据库密码 (D) 菜单命令之后,如下图所示:    如图所示,在设置数据库密码对话框中,在密码 (P) 下方的文本框中输入新密码,之后在验证 (V) 下方的文本框中再次输入一致的新 密码(如果两次输入不一致,则无法设置成功) ,之后单击确定按钮保存设置。 3.4 链接后台数据库 为了顺利地在前台客户端文件(即 AccDev.mdb)中进行设计工作, 您需要将后台数据库文件(即 AccDev_be.mdb)中的表链接到前台客 户端文件(即 AccDev.mdb)。操作步骤如下: 按住键盘的 shift 键(注意,一定要等该程序文件完全打开之后再松开 shift 键,否则会出现登录对话框,如果出现了登录对话框,则 意味着你按 shift 键失败, 需要关闭程序重新打开, 有少量初学者在这个问题上出了纰漏) 双击打开 BXMIS 目录的 AccDev.mdb 文件, , 也就是 Access 开发平台前台客户端文件,主要的设计工作将在这里完成。第一次打开之后的表标签如下图所示:    按以下路径定位:文件(F)→获取外部数据(G)→链接表(L) ,如下图所示:    执行链接表 (L) 菜单命令之后,将会打开链接对话框,浏览定位到要链接的数据文件,单击链接 (K) 按钮,如下图所示    执行链接 (K) 按钮命令之后,如下图所示:    因为要打开的链接的数据库文件有密码保护, 所以, 这里要求输入密码 (如果要链接的数据库文件没有密码保护, 则会直接进入下一步) , 输入正确的密码(初始密码默认为: admin)之后,单击确认按钮,如下图所示:    选中链接表对话框表选项卡中的所有的前缀为 tbl 的表(实际上是选中所有的需要链接的表,可以多选,一次可以链接多个) ,之后单 击确定按钮,如下图所示:    系统将开始执行链接命令,完成链接之后,如下图所示:    如新建表中所提示的方法,给所有的表都加上中文说明,以方便查看和管理,完成之后如下图所示(为了快捷,中文名称可以从报销管 理系统表设计说明书 .doc 文件中复制过来,这也是初步体现了该表字段设计文档的用处) :    3.5 检查控件引用完整性和引用顺序 在正式使用开发平台之前,请检查控件的引用完整性和引用顺序,否则,可能会有意想不到的错误出现。 按住 shift 键(注意,一定要等该程序文件完全打开之后再松开 shift 键,否则会出现登录对话框,如果出现了登录对话框,则意味着你按 shift 键失败, 关闭程序重新来, 有少量初学者在这个问题上出了纰漏) 双击打开 Access 开发平台前台客户端文件, , 也就是 AccDev.mdb 文件,之后单击左侧的窗体窗格,注意到此时窗体的窗格的右侧没有任何窗体,请按以下路径定位:工具 (T) →选项 (O) ,如下图所示:    单击选项 (O) 菜单命令,选择视图选项卡,如下图所示:    选中显示选项区的系统对象 (Y) 复选框,之后单击确定按钮,此时,被隐藏的系统对象,将会全部显示出来,如下图所示:    选中以上右侧窗格中任意一个窗体(请注意,如果您不任意选择一个窗体就按下面的路径定位的话,代码 (C) 的菜单命令将会是灰色不 可选的状态) ,之后按以下路径定位:视图 (V) →代码 (C) ,如下图所示:    执行代码 (C) 命令之后,如下图所示:    如上图所示,按以下路径定位:工具 (T) →引用 (R) ,如下图所示:    执行引用 (R) 菜单命令之后,如下图所示:page 7

    请注意上图的这个顺序是明显不正确的,选中“可使用的引用”列表列表框的 OLE Automation ,之后按优先级之上的 按钮调整引用的 排列顺序,正确的排列顺序如下:    请注意这里的引用完整性和引用顺序,确保如上图所示,OLE 一定要在第三位,如果引用顺序不一致,可能会有意想不到的异常。比如 下图错误:    本演示是在 Access 2003 下截图,如果您的 Access 版本并非 2003 ,则各个引用控件的版本号并不完全和这里一致,但是并不影响本 系统的正常使用。 确保引用正常之后,单击确认按钮关闭引用对话框,之后再单击右上角的 按钮关闭 Microsoft Visual Basic 界面,之后再关闭应用程 序。 请注意,不要随意修改本系统定义的系统窗体,否则,后果可能很严重,除非你可以确认并理解您的修改。 3.6 登录 Access 开发平台前台客户端 双击 AccDev.mdb (不要按住 shift ) ,如下图所示:    输入本系统默认的工号: 000001 ,密码: admin ,之后单击登录按钮,即可登录系统。 如果出现以下错误:    这是因为 Access 开发平台前台客户端文件设置里,并没有进行同步造成的,因为您必须指定后台数据库文件的路径,才可以正常的使 用本系统。下面,我们就将进行这个同步操作,单击当前的错误提示框的确认按钮,之后单击登录按钮旁边的小三角,之后单击服务器设置 按钮,如下图所示:    执行服务器设置之后,如下图所示:    输入系统默认的服务器管理密码:admin ,之后单击确定按钮,将会弹出服务器设置对话框,如下图所示:    正常情况下,前两项保持默认值即可,第三项,服务器地址为 (local) 表示后台数据库文件与前台客户端文件处于同一目录。如果您的 在同一目录,则不需要修改,如果在不同目录,则在这里输入路径名称,比如在分区下的 Date 目录,就输入 C:\Date ,请注意,前台客 户端文件和后台数据库文件并没有强制要求在同一目录,它们可以在不同目录。在本例中,保持 (local) 默认值,因为,两个文件在同一目 录。    数据库名称中输入实际的数据库名称,在本例中,输入 AccDev_be.mdb 即可。之后在密码框中输入密码 admin (注:这里的密码是 后台数据库密码,如果刚才改了后台数据库密码,这里要输入修改后的密码)(一定要输入密码,否则保存不会成功) ,之后单击保存按钮,保 存当前设置,如下图所示:    单击确定按钮,如果你输入的无误,则如下图所示:    如果有错误提示,请检查您的输入是否存在问题。单击确定按钮,即可返回登录界面,单击登录按钮,即可登录系统。 第一次登录系统 的界面如下图所示:    3.7 导航菜单设置 所谓导航菜单,即是正常登录系统之后,左边的导航窗格,默认是有 3 个分类,菜单分类 1,菜单分类 2,菜单分类 3,其中又包括 8 个菜单,从菜单一到菜单八,再加上数据分析、系统管理、退出系统,根据本示例系统的规划,在本示例程序中需要用到基础资料、报销管 理、系统管理和退出系统一共 4 个菜单,而系统管理、退出系统这二个导航菜单系统已经定义,因此,只需要将默认的菜单分类 1 改为报销 管理,菜单一更名为报销管理, ,菜单二更名为基础资料,并将菜单三至菜单八隐藏即可。操作步骤如下: 双击 AccDev.mdb 文件,之后在系统登录界面的工号文本框中输入默认的工号:000001,在密码文本框中输入默认的密码: admin (如果修改过密码,则输入相对应的密码) 。登录系统之后,按以下路径定位: 系统菜单,导航菜单设置,如下图所示:    初次单击导航菜单设置之后,如下图所示:    单击工具栏的修改按钮(请注意,如果不单击修改按钮,将无法执行以下的修改) ,由于系统比较简单,这里我们把是否分类前的勾去掉, 之后取消导航菜单名称中菜单三至数据分析的相对应的启用按钮的选定,如下图所示:    之后将菜单分类(1)改为报销管理,菜单一,菜单二分别清除,分别重新输入报销管理、基础资料,完成之后,如下图所示:    确认输入无误之后,单击保存按钮,然后单击关闭按钮。则如下图所示:    由此图可以得知,我们所要达到的目的,已经完成。 第四章 基础资料窗体的设page 8

计 4.1 基础数据界面的制作 导航菜单设置完成之后,就该制作数据显示页面了。 关于数据窗体(界面)的制作,含子窗体的窗体(界面)制作和不含子窗体的数据窗体制作,并不完全一致,从技术角度来说,技术含 量也不一样,下面,我们就先以员工姓名的基础资料为例,来介绍不含子窗体的数据窗体的制作。在这里,我们可以将之称之为简单窗体, 简单窗体制作的操作步骤如下: 如果尚未退出应用程序,则退出(关闭)应用程序。然后按住 shift (注意,一定要等该程序文件完全打开之后再松开 shift 键,否 则会出现登录对话框,如果出现了登录对话框,则意味着你按 shift 键失败,关闭程序重新来,有少量初学者在这个问题上出了纰漏) ,双 击打开 AccDev.mdb ,之后激活对象窗格的窗体按钮,如下图所示:    由于本实例非常简单,如此,也就完成了设计工作,单击右上角偏下的关闭按钮(注意,右上角有两个关闭按钮,在此处点偏下区域的 那一个) ,关闭当前设计对话框(请注意,没有必要将此设计保存为查询,在设计过程中,切勿执行任何保存操作) ,则可能会弹出如下对话 框(如果是涉及到对已有数据库源的修改的话,则会出现,如果是第一次设置数据源,则不会出现) ,如下图所示:    选择并双击 usysfrmLogin 窗体,则弹出系统登录界面,如下图所示:    正确输入工号和密码,点击登录按钮,则会弹出正常的登录界面,如下图所示:    此刻注意到任务栏上有两个关于 Access 的项目,一个是控制面板,一个是 AccDev :数据库,当前显示的即是控制面板,单击鼠标 选择 AccDev 切换到数据库窗口界面,如下图所示:    切换回 AccDev,将左侧的滚动条向上移动,之后选择在设计视图中创建窗体,之后在单击设计按钮,如下图所示:    选择在设计视图中创建窗体,并单击设计按钮之后,效果如下图所示:    注意到窗体的左侧有一个浮动的工具箱,我们一般习惯将其固定到左侧。将鼠标移动到工具箱上方标题栏的空白区域(非按钮区域,即 是空白区域) ,之后按住鼠标不松向左边拖动,此时,该工具箱会自动嵌入到左侧,如下图所示:    如果您不慎将该工具箱关闭,则可在菜单栏按以下路径定位 : 视图 (V)→ 工具箱 (X) ,如果工具箱被关闭,则工具箱 (X) 是浮起的 状态,如果工具箱是当前显示的,则该工具箱 (X) 按钮是被凹下的状态,如下图所示(当前工具箱是显示状态) :    注意到上图的菜单底部有一个箭头的按钮,这是因为,当前的下拉菜单隐藏了默认不常用的菜单命令,以下按如下路径定位,视图 (V), 箭头按钮,单击箭头按钮,完整的视图菜单如下所示:    请注意以上的菜单,当前状态,工具箱、标尺、网格三个命令菜单都是凹下去的,表明当前这三个命令所代表的对象,当前都是显示的 状态,工具箱我们已经知道了。那标尺是什么呢?请注意当前是设计界面,上侧和左侧各有一个标有数据的数据条,这两个数据条,就是标 尺,标尺是在设计的时候定位控件用的。而标尺包围的内部区域,颜色较浅的灰色区域,即是正式的设计区域,之上的正方形窗格,即是网 格显示的效果。各位可以将这两个选项取消,查看一下显示效果,这两个命令按钮,根据个人习惯而决定是否采用,通常都是使用的。 注意到上标尺和左标尺交叉的地方有一个小方格,在此小方格上单击右键,激活的命令菜单如下:    请注意,这里的属性,就是大名鼎鼎的窗体属性,窗体属性,是在窗体设计中频繁使用的设计对话框,双击该小方块也可以直接打开窗 体属性对话框,请注意,在标尺的数字区域任何一处双击也可以窗体属性对话框,同时,标尺区域数字区域内部的右键快捷菜单的属性,即 是窗体属性。    双击标尺的数字区域,或者上标尺与左标尺交叉的小方块,打开窗体属性对话框(注意窗体属性的对话框的标题栏,有窗体二字,因此在此 设计界面,可以激活的属性对话框种类很多,注意不要认错了地方) ,选择数据选项卡,如下图所示:    单击记录源的输入区域,则其后会出现一个 按钮,单击该按钮,之后如下图所示:    选择表选项卡,之后选中 tblCodeyg ,之后单击添加 (A) 按钮,如下图所示    注意,在这里,按住 Ctrl 键再点选表,可以将同时选中多个表,在本例中,我page 9

们只需要使用一个表,因此,在将要使用的表添加到设 计器中后,选择关闭 (C) 按钮,关闭当前显示表对话框,需要注意的是,该显示表对话框,可以在该界面中设计中,重新恢复显示,只需 要单击工具栏上的 按钮即可。关闭显示表之后的对话框如下图所示:    该设计窗格分为上下两部分,上半部分显示选择的表和查询 ( 也可以在这里建临时关系——如果你不了解什么是关系,可以查阅相关内 容 ) ,下半部分,则是需要使用到的字段,该界面是 SQL 语句查询语句生成器的界面,即根据您的设计情况,自动生成 SQL 查询语句, 如果您可以具备 SQL 查询语句编写能力,直接编写 SQL 查询语句,不需要进入此界面。 注意到选择的表显示框内,除了显示正常的表的字段之外,还多了一个 * 号,双击该 * 号,表示选择所有的字段,双击某一个字段的 名称,表示选择该字段。在本例子中,我们双击该 * 号,则如下图所示:    我们发现,下半格的显示区域内,有些宽了,可以将鼠标移动到两个显示窗格之间,将会出现双向箭头,这时可以采用拖拽的方式来扩 大的当前的显示区域,如果在此处双击,则其显示区域大小正好合适。调整大小后如下图所示:    由于本实例非常简单,如此,也就完成了设计工作,单击右上角偏下的关闭按钮(注意,右上角有两个关闭按钮,在此处点偏下区域的 那一个) ,关闭当前设计对话框(请注意,没有必要将此设计保存为查询,在设计过程中,切勿执行任何保存操作) ,则可能会弹出如下对话 框(如果是涉及到对已有数据库源的修改的话,则会出现,如果是第一次设置数据源,则不会出现) ,如下图所示:    单击是 (Y) 按钮,则会回来窗体属性对话框,注意到了记录文本框中多了一行 SQL 代码,事实上,刚才执行的操作,也就是为了生成 这行代码,你也可以直接输入该行代码而不需要进入刚才的设计界面。但是对学初学者来说,推荐使用 SQL 语句生成器。如果你执行的没    有错误,刚才生成的正确代码如下: Select tblCodeyg.* FROM tblCodeyg; 需要提醒大家的是, Access 数据中使用的 SQL 代码,与 SQL Server 的 T-SQL 代码,并不完全一致,很多情况下,不能直接通 用。习惯了使用 T-SQL 代码的读者,请注意这一点。 关闭窗体属性对话框,则如下图所示:    注意到其中有一个浮动的字段列表的显示框,即是刚才选择的字段的列表,如果不慎关闭了该列表,可以单击工具条上的显示字段按钮 恢复显示。按住键盘上 Ctrl 键,分别点选两个字段,之后把它们拖放到设计界面(也可以分别双击,它自然会在设计区域显示) ,如下图所 示:    关闭字段列表,之后适当修改标签(如果您未曾执行前面的登录操作,则这里显示是英文标签,此刻,还要手工更改标签,这也是做设 计之前,为什么要登录的原因,这也是本系统的特性,此外,有一点也要特别注意,如果您未曾登录系统,即使是后台数据库有数据,这里 也不会显示,这种设计,也是为了保护您的安全,因此,在设计之前需要登录系统,即按照本教程的步骤操作) ,在这里,我们将标签后面 的冒号给去掉(根据情况或者个人的爱好而定) ,操作步骤如下:双击标签名称,之后在弹出的标签对话框中,选择格式选项卡,之后在标 题文本框中,清除后面的冒号,完成之后如下图所示(也可以选中标签后直接按 F2 键激活标签的标题的修改,直接修改标签,或者以连续 两次间隔时间较长的单击激活标签的标题的修改,亦可直接修改标签) :    按以下路径定位:视图 (V)→ 窗体视图 (F), 如下图所示:    单击窗体视图的菜单命令,即将界面从设计界面切换到了显示界面,如下图所示:    注意到左边的一个带黑小三角的竖条叫做记录选定器,下面一条横线叫做分隔线,可以在窗体属性里决定是否显示,默认是显示的。如 果控件特别多而超出了屏幕的显示,则右边和下边还可能出现滚动条,分别叫做垂直滚动条和水平滚动条。事实上,通过拖拽下来的两个字 段的显示,每一个都是分别两个控件组成的,左边是标签控件,用以显示字段名称,右边是提供输入的控件,叫做文本框。 在这里,这种显示效果不是我们想要的,按以下路径定位:视图 (V)→设计视图(D) ,单击设计视图返回设计界面之后,双击标尺栏的 空白区域或者上标尺与左标尺交叉的小方块打开窗体属性,之后选择格式选项卡,如下图所示:page 10

    注意到默认视图是单个窗体,单击该组合框选择数据表选项,将默认视图更改为数据表,如下图所示:    关闭窗体属性对话框,之后再单击工具栏上的保存按钮(或者按以下路径定位亦可:文件(F)→保存(S)) ,则会弹出另存为对话框,如下 图所示:    在窗体名称中,输入 frmyg_child ,之后点确定按钮保存命令,之后单击右上角靠下的关闭按钮,关闭当前窗体。之后在窗体列表中 双击 frmyg_child 打开该窗体,则如下图所示:    因为在这里默认视图已经修改为数据表,故如此显示,如果是默认的窗体视图的话,则是以前切换的显示界面,在这里,初学者可以对 比窗体视图和数据表视图的差别。 另外提一下窗体的命名约定:为了便于标记,可以将所有用户定义的窗体的以都加上 frm_ 或者 frm 的前缀,同时,赋予 _child 或 以 child 的后缀,中间这一段,则可以自由选定,以熟悉识别为前提。但是有一点需要知道,那就是在设置导航按钮的时候,由于窗体太多,    当你选择子窗体的时候,只显示带 child 后缀的窗体。 关闭该窗体。如表一样,可以在选中该窗体,之后在右键菜单中选择属性,如下图所示:    在属性中,可以和表一样,给窗体添加说明。在这里,我们给刚制作的窗体添加这样的说明:员工姓名 - 主数据窗体。这样,主数据界 面窗体就制作完成了,由于这是一个基础资料的主数据界面,所以,非常简单。 4.2 导航按钮设置 我们刚才完成了主界面的设计,下面需要做的就是将其显示出来,也就是可以在开发平台查看刚才的设计成果,按上一节所提,切换到 控制面板,之后按以下路径定位:系统管理→导航按钮设置,如下图所示:    执行导航按钮设置之后,如下图所示:    这里就是设置导航按钮的界面,但是默认是显示系统管理窗格的导航按钮,在这里,我们可以知道我们上一节制作的员工姓名的主数据窗 体,应该位于基础资料导航窗格内部,因此,在上面的界面,直接点击左边的基础资料窗格,如下图所示:    如上图所示,由于我们之前没有在此窗格内部设置任何的导航按钮,因此,选中序号为 1 的记录(如果设置了,则往后顺延,比如,已 经在此窗格设置了 3 个导航按钮,则选择序号为 4 的记录) ,之后点工具栏上的修改按钮,如下图所示:    在这里,需要说明的是,对象标题即是点击导航按钮进入正式的窗体界面之后在窗体的工具栏上部显示的名称,在本例中,我们输入:员 工姓名;而按钮名称,则是单击导航窗格之后看到按钮的名称,在本例中,我们也输入员工姓名;对象类型,就是你单击导航按钮所要打开 的对象的类型,在本例中,我们选择子窗体;指向对象,则是单击导航按钮所要打开的具体的对象,本例中,我们选择: frmyg_child ; 一句话帮助,则是在窗口下部对此窗体所作的说明,可以根据需要决定是否选择,本例输入以下内容:员工姓名的参数列表控制。之后在对 象属性中,选择启用和打开两个复选框。更改图片按钮则是更改你需要显示的图片,完成之后,如下图所示:    检查输入无误之后,单击关闭按钮,保存修改。之后点关闭按钮,退出导航按钮设置,之后再单击参数控制导航窗格,发现右侧并没有按 钮显示出来,如下图所示:    这是因为当前只添加了导航按钮,还没有进行权限设置的原因。按以下的路径进行定位:系统管理→部门及组权限,如下图所示:    双击管理员,之后会出现管理组的下级目录,选中管理员组,之后再单击修改按钮,如下图所示:    如上图所示,选择常规权限单选按钮,之后点击确定按钮,如下图所示:    如上图所示,在菜单名称中选择基础资料(这里,这里的菜单名称和导航窗格菜单是一一对应的) ,则如下图所示:    如上图所示,选择员工姓名,则如下图所示:    注意到权限设置选项区有了可选项,但是就仅仅一个打开,这就因为我们当初定义导航菜单的时候也只定义了启用和打开两个权限选项, 启用是指将对象,也就是启用的那个按钮对应的窗体,添加到如上图所示的功能按钮列表中来,如果不选中启用复选框,则这里在菜单名称 中选择参数控制之后,功能按钮列表中根本就不会显示员工姓名的选项,也就无法进行该窗体的权限设置,而打开则是指对于特定的权限组 (page 11

也就是用户组,比如管理员即是一个权限组,也是一个用户组,也就是几个特定成员或者用户的集合) ,可以将窗体的功能按钮显示出来, 从而用户可以使用这一部分功能。在本例中,由于我们需要赋予管理员组打开的权限,因此,选择打开复选框,之后单击保存按钮保存权限 设置,单击保存按钮之后,则会弹出如下对话框:    单击确定按钮,则会弹出新权限保存成功的提示对话框,再次单击确认按钮,之后关闭当前部门以用户组权限设置对话框。之后退出部 及用户组权限设置对话框,单击参数控制导航窗格,注意到右边已经出现了员工姓名按钮,如下图所示:    单击如上图所示的员工姓名按钮,则如下图所示:    如上图所示,员工姓名数据显示窗体的导航按钮设置的工作已经完成。 4.3 新增窗体的制作 由于我们需要进行精确的权限控制,因此,我们需要制作单独的新增窗体,而需要禁止掉数据显示窗体的数据新增功能,这样,才有利 于用户权限的管理和保证数据的完整性。 禁止数据显示窗体的数据新增功能操作步骤如下: 切换到数据库窗口,之后打开 frmyg_child 窗体并切换到设计视图,打开窗体属性对话框,选择数据选项卡,之后将记录集类型由默 认的动态集修改为快照,如下图所示:    关闭窗体属性,保存修改。此时,起先制作的数据显示窗体的数据新增、修改以及删除功能都已经被禁止掉。这些功能,我们将通过单 独的工具栏按钮来实现,以便更好地实现权限的控制。 新增窗体制作的操作步骤如下: 关掉当前的窗体,回到数据库窗口,双击在设计视图中创建窗体,之后关闭工具箱的向导,即让工具箱的 按钮处于浮起的状态,默认 是凹下的,即默认是激活的状态,我们这里不需要使用向导,把它取消即可(即处于浮起的状态) 。之后点击工具箱的(文本框)控件,之 后再设计界面适当的位置,单击鼠标左键,即会新建一个文本框,如下图所示:    新建的文本框会默认携带一个标签控件, 即左边的显示为 Text0: 的文字控件, 单击选中该控件, 之后单击鼠标右键激活右键快捷菜单, 如下图所示:    如上图所示,选择属性 (P) ,则会弹出标签属性对话框,在标签属性对话框,选择格式选项卡,之后将标题属性由 Text4: 修改为员 工姓名,之后关闭标签属性对话框,保存修改。之后再次选择该标签单击鼠标右键,选择大小 (S) 级联菜单的正好容纳 (F) 命令。之后选 择文本框,同样单击鼠标右键,选择属性 (P) 命令,如下图所示:    在弹出的文本框对话框中,选择其他选项卡,修改名称属性为:ygxm ,这个名称,是在后台代码中唯一标识该文本框的名称。    之后按以下路径定位: 视图 (V) →窗体页面/页脚 (A) , 单击窗体页面 / 页脚 (A) 菜单命令之后 (注意切勿弄成了页面页眉 / 页脚) , 如下图所示:    将鼠标移动到窗体页脚底部,此时鼠标将会显示为上下双向箭头,按住鼠标向上拖动,将窗体页脚完全隐藏,如下图所示:    之后切换到数据库窗口,选中 ActiveX 窗体(此窗体将在 2007 年 3 月份以后的版本中新增,如果你的版本中没有此窗体,可以下 载新版本,导入此窗体即可,下载地址: http://www.accessoft.com/down/ActiveX.rar) ,之后在设计视图打开该窗体,通过鼠标拖放的 方式选中一区内的所有控件(也可以按住键盘 Ctrl 键,一个一个地点选) ,如下图所示:    同时按住键盘上的 Ctrl 键和 C 键将选中的控件复制到剪贴板,或者按以下路径定位:编辑 (E) →复制 (C) ,亦可将选中的控件复制 到剪贴板,之后切换到刚才的正在编辑的窗体 1 ,单击窗体页面内的空白区域,之后执行编辑 (R) 下拉菜单的粘贴 (V) 命令,则可将刚 才复制到剪贴板的内容粘贴到当前正在编辑窗体的窗体页眉中,如下图所示:    关闭 ActiveX 窗体,之后使用鼠标拖拽各个控件并利用格式下拉菜单内的各种命令(主要是对齐和大小级联菜单命令)的方式,调整    一下窗体内控件的分布情况,调整完毕之后,如下图所示:    此时,单击右上角偏下的还原按钮    ,注意,是该窗体的还原按钮,而非整个 Access 应用程序的还原按钮,即偏下的那一个,即    按钮,执行过还原命令按钮之后,如下图所示:    请注意一点,现在才是正在设计中的窗体 1 面向终端用户正常显示的真实大小page 12

,刚才那个是最大化显示,因为该窗体是新增窗体,必然 会单独弹出来,因此,独立显示是存在的,出于美观的考虑,我们需要调整一下该窗口的的大小,同样,通过将鼠标移动到窗体边缘拖拽的 方式调整窗体的大小,完成之后如下图所示:    调整完成之后,打开该窗体属性,选择格式选项卡(通过拖拽的方式可以拉长该属性窗口) ,分别执行以下属性修改: 标题:无默认值,输入以下字符:员工姓名新增; 滚动条:默认值为两者都有,修改为:两者均无; 记录选定器:默认为是,修改为:否; 导航按钮:默认为是,修改为:否; 分隔线:默认是为,修改为:否; 自动调整:默认为是,修改为:否; 自动居中:默认是否,修改为:是; 边框样式:默认为可调边框,修改为:对话框边框; 最大化最小化按钮:默认为两者都有,修改为:无。 之后再选择其他选项卡,分别执行以下属性修改: 弹出方式:默认为否,修改为:是; 模式:默认为否,修改为:是。 修改完毕之后,关闭窗体属性对话框保存修改。 有一个问题请读者注意一下,从开始到现在做了很多修改,却从来没有保存,这样的话,如果应用程序发生故障,那么,所有的工作都 将丢失,因此,应该尽早保存,当然,这步操作可以尽早进行,并不是非要放在这一步进行。单击工具栏上的保存按钮,在弹出的另存为对 话框中输入窗体名称: frmyg_child_Add ,之后单击确定按钮确认。这里需要说明一下新增窗体的命名规则,这是强制的,如果您违反 了这个命名规则,那么您的新增功能一定有问题或者无法实现。新增窗体的命名规则:基本数据窗体的名称 + _Add 。由于此新增窗体是 员工姓名数据窗体的新增窗体,而员工姓名数据窗体的命名是 frmyg_child ,因此,该新增的窗体的命名则必须是 frmyg_child_Add 。 也就是说,当你的基础数据窗体的命名确定以后,新增窗体、修改窗体的命名则已经给定死了,绝对不能修改。而修改窗体的命名规则只是    将 _Add 替换成 _Edit 而已。 保存窗体之后,按以下路径定位:视图 (V) ,代码 (C) ,执行代码 (C) 菜单命令之后,如下图所示:    这里,即进入了后台代码编写的界面,注意到当前的代码窗口是正是 frmyg_child_Add ,在该窗口中输入以下代码: Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object) Select Case Button Case "保存" cmd_Save Case "关闭" DoCmd.Close End Select End Sub Private Sub cmd_Save() Dim rst As DAO.Recordset If IsNull(Me.ygxm) Then MsgBox "请输入员工姓名!", vbCritical, "提示:" Me.ygxm.SetFocus Exit Sub End If Me.Refresh If Acchelp_StrDataIsExist("tblCodeyg", "ygxm", Me.ygxm) = True Then MsgBox "你输入的数据已经存在,请重新输入", vbCritical, "警告" Me.ygxm.SetFocus Exit Sub End If If MsgBox("您确认要保存吗?", vbOKCancel + vbInformation, "提示") = vbOK Then Set rst = CurrentDb.OpenRecordset("tblCodeyg", dbOpenDynaset) rst.AddNew rst("ygId") = acchelp_autoid("Y",2, "tblCodeyg", "ygId") rst("ygxm") = Me.ygxm rst.Update rst.Close Set rst = Nothing '刷新数据    If IsLoaded("usysfrmMain") Then DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child" DoCmd.Echo True End If MsgBox "保存成功!", vbInformation, "提示" Me.ygxm = Null End If End Sub 以上代码,如果您能看懂最好,如果你不能看懂,则将蓝色字符替换为你的场景对应的角色即可。所有的蓝色字符皆为个性化参数。这 些名称要么是窗体名称、表名称、字段名称、控件名称或者提示文本,之前我们都已经见过了,因此,在这里就不多说了。如果初学者想了 解这些代码的真实含义,可以去查阅 VBA 语言的相关教程。 确认修改无误后保存输入,并关闭代码页面。有一点请注意,虽然员工姓名参数表里有两个字段,但是我这里只添加了一个文本框对应 于员工姓名字段,而并未曾添加另一个字段,这是因为另一个字段是系统编号的字段,其数据由数据添加时由代码自动生成的,不需要用户 来干预,故可以不为其设置输入数据的文本框。这一点请注意。当然,你要想添加也不是不可以。不过,那种做法的处理比这种做法的处理 要复杂的多,在这个场合,没有那个必要。在这个场合,负责自动生成序号是上面所书写代码中这样一行: rst("ygId") = acchelp_autoid("Y",2, "tblCodeyg", "ygId") 稍后当正式的数据输入显示之后,大家可以对比一下,以便更好地了解这一行代码。 这样,我们就完成了新增窗体的制作,关闭当前的新增窗体(可以同样给窗体添加说明,比如,我们这里可以添加这样的字符说明:员 工姓名_新增窗体) ,之后切换到控制面板界面,并将控制面page 13

板最大化显示。按以下路径定位:参数控制,员工姓名,点击员工姓名进入之后, 发现工具栏上仍然只有隐藏和关闭两个按钮。这是因为导航按钮上并没有勾选该对象的新增复选框(功能)的原因。按以下路径定位:系统 管理,导航按钮设置,进入导航按钮设置之后,再单击左边的基础资料导航窗格,如下图所示:    如上图所示,由于我们这里是为员工姓名添加新增的功能,因此,选择员工姓名相对应的序号为 1 的记录,之后再单击工具栏上的修改 按钮,则如下图所示:    如上图所示:勾选新增复选框,之后关闭当前的页面,再次进入员工姓名页面,发现还是没有新增按钮,如同上一节一样,这是因为还 没有赋予访问权限的原因。在本系统中,如果不直接赋予访问权限,管理员也是没有任何对象的访问权限的。但是在这里的赋予权限,可以 比上一小节所讲到赋予访问权限可以更为直接一些。 按以下路径定位:系统管理,部门和组权限,之后双击管理员,展开管理员,选中管理员组,之后在右侧窗格中选择按钮名称为员工姓 名的条目,如下图所示:    之后再单击修改按钮,如下图所示:    如上图所示,读者比上一节权限设置区域已经新增加了一个新增复选框,这里的复选框的数目是与导航按钮那里的设置相对应的。勾选 新增复选框,之后单击关闭按钮保存修改。 这时,关闭当前界面,再次进入居住城市的数据界面,则会发现,工具栏上多了一个新增复选框。如下图所示:    在这里,我们可以尝试输入一下记录,比如输入:张三,之后单击保存按钮保存录入(如果不单击保存按钮,则不会将数据录入数据库, 单击关闭则是放弃新增数据) ,则会弹出确认对话框,确认输入, (不关闭的话,则可以继续输入) ,如下图所示:    如果你企图保存空数据的话,会有如下的错误提示:    如果你企图输入重复的记录的话,比如已经输入了张三,企图再次输入张三,则会如下图所示:    为什么这里一定要禁止重复值的录入呢?那是因为这里是选项列表,既然是选项列表,怎么会需要重复值呢? 请注意到表的字段设计,这里我根据需要,定义了该字段的长度是 20 ,也就是说,最多只允许输入 20 个字符,如果超过了这个限 制,则会如下图所示:    此时,单击结束 (E) 按钮返回,修改输入的数据,重新保存即可。 4.4 界面的美化 在功能上,新增窗体是完成了,出于美观的考虑,我们还可以做点美化的工作,操作步骤如下: 在设计视图打开新增窗体,选中员工姓名的文本框(而不是标签) ,之后再击工具栏上的填充 / 背景色按钮 ,选择黄色,如下图所示:    之后再次选中员工姓名的文本框(而不是标签) ,之后再击工具栏上的特殊效果 ,选择平面,如下图所示:    之后再次选中员工姓名的文本框(而不是标签) ,之后再击工具栏上的线条 / 边框颜色 ,选择深灰色,如下图所示:    之后再打开该文本框的属性对话框,选择格式选项卡,将背景样式,由常规修改为透明,如下图所示:    完成修改后,关闭保存。当再次在正常界面打开新增窗体,则如下图所示:    是不是比之前美观了?当然,美化的工作可做可不做,取决于您自己的喜好。 4.5 修改窗体的制作 前面我们已经提到,为了便于进行权限的管理,我们禁止掉了员工姓名的主数据界面的编辑功能,只通过特定的功能按钮来实现,前面    我们已经完成了新增功能的制作,下一步,就是修改功能的制作了。同理,修改功能也需要在单独的界面里完成,因此,我们需要先制作修 改窗体,修改窗体的建立的操作步骤如下: 如新增窗体的制作一样,先新建一个新的空白窗体,之后添加文本框控件并重新命名该控件(文本框的标签显示更改为:员工姓名,文 本框的名称属性——如新增窗体所示,更改为:ygxm) ,之后显示窗体页眉页脚,并调整大小,同时保存当前的窗体设计,将窗体按之前提 到命名规则,命名为: frmyg_child_Edit ,与新增窗体操作步骤一样的部分,在这里不再重复讲述,调整好的窗体如下图所示:    下 一 步 与 上 一 节 类 似 , 把 ActiveX_02 窗 体 一 区 ( 注 意 , 这 次 是 ActiveX_02 窗 体 ) 内 的 控 件 全 部 拷 贝 到 当 前 正 在 编 辑 的page 14

 frmyg_child_Edit 窗体窗体页眉内并适当的调整各个控件的布局,如下图所示:    根据上一节介绍的方法调整控件布局,并实际调整窗体显示的大小,完成输入控件的美化工作,如下图所示:    调整完成之后,打开该窗体属性,选择格式选项卡(通过拖拽的方式可以拉长该属性窗口) ,分别执行以下属性修改: 标题:无默认值,输入以下字符:员工姓名修改; 滚动条:默认值为两者都有,修改为:两者均无; 记录选定器:默认为是,修改为:否; 导航按钮:默认为是,修改为:否; 分隔线:默认是为,修改为:否; 自动调整:默认为是,修改为:否; 自动居中:默认是否,修改为:是; 边框样式:默认为可调边框,修改为:对话框边框; 最大化最小化按钮:默认为两者都有,修改为:无; 关闭按钮:默认为是,修改为:否。 之后再单击数据选项卡,执行下列属性修改: 允许添加:默认为是,修改为:否。 之后再选择其他选项卡,分别执行以下属性修改: 弹出方式:默认为否,修改为:是; 模式:默认为否,修改为:是。 修改完毕之后,关闭窗体属性对话框保存修改。 进行到这里,我们切换到数据库窗口,单击模块选项卡,再单击新建按钮,如下图所示:    单击新建按钮后,如下图所示:    在该界面中输入以下代码(蓝色为变量名称,是个性化字符,可以自由定义,但是不能违反标识符命名规则) : '文本型变量 Public selectstr As String 之后单击工具栏上的保存按钮,输入任何的模块名称,比如我们这里输入 variable ,之后确认保存,关闭代码窗口,再在设计视图打开 frmyg_child ,之后单击员工序号文本框,在激活的右键快捷菜单中选择属性,如下图所示:    在打开的文本框属性对话框中选择事件选项卡,之后再单击获得焦点文本框,之后再单击之后出现的 按钮,如下图所示:    单击后面的三个小点后,会如下图所示:    如上图所示,选择代码生成器,再单击确认按钮,则如下图所示:    在鼠标的光标处输入下列代码: On Error GoTo Err_ygId_GotFocus: selectstr = Me.ygId Forms!usysfrmMain!labFind.Tag = 1 Forms!usysfrmMain!btnEdit.Tag = 999 Exit_ygId_GotFocus: Exit Sub Err_ygId_GotFocus: Resume Exit_ygId_GotFocus 以上字符,蓝色给个性化字符,如果您看不懂以上的代码,则将其中的蓝色字符替换为你的场景中适当的字符即可。输入完毕之后如下 图所示:    确认无误关闭代码窗口,保存修改,之后再打开该窗体的属性,即 frmyg_child 的窗体属性,选择事件选项卡,在成为当前文本框中输 入以下内容: =selectrecord() 。如下图所示:    关闭窗体属性保存输入,关闭 frmyg_child 窗体并切换到 frmyg_child_Edit 窗体,之后再打开该窗体的窗体属性,选择事件选项 卡,单击加载文本框,之后再单击该文本框之后出现的 按钮,之后选择代码生成器,单击确认按钮,如下图所示:    在鼠标光标处,输入以下代码: Me.RecordSource = "Select * FROM tblCodeyg Where ygId = '" & selectstr & "'" 同样,蓝色字符为个性化字符,如果你看不懂,在您的环境中适当替换即可。 确认输入无误之后,关闭该代码窗口,之后再关闭窗体属性以保存修改。进行到这里,我们该进行一个必要的操作,给该设计窗体的文 本框控件添加数据源。打开员工姓名的文本框属性,选择数据选项卡,控件来源对话框中输入:ygxm。请注意,这里的控件来源,一定要 填表的实际字段名称匹配。如下图所示:    之后再按以下路径定位:视图(V)→代码(C) ,单击代码后,如下图所示:    在鼠标光标处,输入以下代码: Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object) If IsNull(Me.ygxm) Then MsgBox "请输入员工姓名!", vbCritical, "提示:" Me.ygxm.SetFocus Exit Sub End If Me.Refresh DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child" DoCmd.Echo True '触发子窗体计时器事件 Forms!usysfrmMain!frmChild.Form.TimerInterval = 300 DoCmd.Close acForm, "frmyg_child_Edit" End Sub 同理,蓝色字符为个性化字符。完成之后如下图所示:    进行到这里,修改窗体就已经做好了,关闭当前所有设计界面,之后如新增窗体一样,先添加导航按钮的修改属性,之后再给管理员组 添加修改的权限。最后别忘记page 15

了给窗体属性添加说明文字,比如这里的场合:员工姓名 - 修改窗体。 下面我们来试验一下修改效果,先使用新增功能,多添加几条记录,比如李三、王五,如下图所示:    选中本图中序号为 Y02 的李三,之后单击工具栏上的修改按钮(再强调一次,如果不进行导航按钮属性添加和权限赋予,这里是不会 出现修改按钮的) ,则如下图所示:    将李三修改为李四,之后单击关闭按钮,则如下图所示:    如上图所示,这就是我们所要的修改的功能,符合我们的设计要求。但是还有一点瑕疵,那就是我们刚才单击的是序号为 Y02 的记录, 但是当关闭掉修改窗体的时候,系统却自动定位到第序号为 Y01 的记录,这样做似乎不太好,如果记录太多的话,无法核实是否完成了所 要的修改,下一节,我们就来实现这一功能,修改完毕之后,返回到起先选定的修改记录。    4.6 返回修改记录的原始定位 第一:进入 variable 模块的代码编辑界面,输入以下代码: '文本型变量 Public g_CurrentSelectStrID As String 完成之后如下图所示:    第二:在设计视图打开 frmyg_child 窗体,之后打开该窗体的属性,选择事件选项卡,如上一节所述,进入计时器触发(把滚动条向 下拉,就会看到计时器触发事件)的代码编辑页面,如下图所示:    在鼠标光标处,输入以下代码: Acchelp_FindstrRecord (g_CurrentSelectStrID) '计时器执行一次后不再执行 Me.TimerInterval = 0 第三:进入 frmyg_child_Edit 窗体的设计视图,按以下路径定位:视图 (V), 代码 (C) ,进入该窗体的代码页面,如果你是按照本 教程练习下来的话,会看到有这样的三行代码: Private Sub Form_Load() Me.RecordSource = "Select * FROM tblCodeyg Where ygId = '" & selectstr & "'" End Sub 如上所示,在第二行和第三行中加这样一行代码: g_CurrentSelectStrID = selectstr 完成之后如下图所示:    如上图所示,大家会看到这一行代码:    其实,这一行代码,本来应该在这一步才应该添加的,在上一节中,为了减少本节的叙述,我在上一节中就直接添加上了。 第四:现在我们就可以试验一下效果,切换到控制面板,进入员工姓名,我们现在就李四这一数据修改为:李三,输入之后单击关闭按 钮,则会返回修改的记录,比上一节的效果好了很多,可以确认修改是否正确,这在记录比较多的时候,是很有用处的,如下图所示:    4.7 删除功能的添加 相对于新增功能和修改功能而言,删除功能的制作就显得相当简单了。 进入 frmyg_child 窗体的设计视图,之后直接进入该窗体的代码页面,如下图所示:    新起一行,输入以下代码: Public Sub btnDel() If MsgBox("您确认要删除吗?", vbYesNo + vbInformation, Forms!usysfrmLogin.Caption) = vbYes Then DoCmd.Echo False Call AccHelp_DeleteFldstrRow ("tblCodeyg", "ygId", selectstr) Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child" DoCmd.Echo True End If End Sub 确认无误之后,保存修改,之后再如前所述,添加导航按钮的删除属性,之后再赋予管理员组删除权限。 4.8 基础资料小结 如上所述,完成其他基础资料表的制作,如下图所示:    写在这里,我们认为有必要做一个小结 : 第一:我这里的操作步骤,是按照教学的步骤讲的,便于初学者理解和掌握,在实际操作过程中,出于省时的目的,可以将多个步骤合并, 比如, 可以一次性勾选所要用到的所有导航按钮并一定性赋予启用、 打开、 新增、 修改、 删除等权限, 不用如同本教程这样严格按照顺序来; 第二:在代码中,采用了很多平台内置自定义函数和平台内部的系统窗体,当你发现莫名其妙的函数和莫名其妙的句子的时候,请不感觉 到特别疑惑; 第三:关于类似的基础资料<报销类别>窗体的制作,这里就不讲制作过程了,其实,也可以这样进行,复制前面制作的<员工姓名>窗体, 之后修改相关参数即可,比如在这个环境中,我把<员工姓名>的相关三个窗体复制一遍,之后修改所有相关参数,即可完成<报销类别>的 制作,当然,这样的操作是需要对本系统有一定的了解才可以熟练运用的。 注:为了不影响下面的制作,请大家建报销类别窗体时候最好是按照建议的方式命名 报销类page 16

别主窗体 : frm_CodeBxlb_child 报销类别新增窗体: frm_CodeBxlb_child_add 报销类别修改窗体: frm_CodeBxlb_child_edit 第五章 报销明细窗体的设计 5.1 创建查询 已经介绍了基础资料窗体的制作,现在该制作报销明细窗体了。报销明细窗体的基础功能与基础资料窗体类似,但是多了查找、导出、 打印三个功能,因此,从技术上讲,要略微复杂一些。 因为要制作查询,所以,基于这类需要制作查询的功能窗体在制作时就不能直接取表做数据源,正确的做法应该基础于表制作查询,之 后再取查询做数据源。 下面,我们就详细地介绍一下这类功能窗体的制作过程。 如前所述,按住 shiift 键,双击打开 AccDev.mdb ,之后定位到窗体窗格,双击 usysfrmLogin 窗体,在弹出的登录对话框中输入 正确的工号和密码,点击登录按钮登录系统,之后切换到 AccDev 数据库窗口,定位到查询窗格,如下图所示:    选定在设计视图中创建查询,之后单击设计按钮,如下图所示:    这样的界面我们在前面已经介绍过了,其实大致的操作与前面所介绍的是一致的,无非是一个不需要保存设计(此种情况即是利用该设 计界面自动生成查询语句) 而一个需要保存设计 , (创建一个实际的查询对象) 当前界面, 。 依次添加 tblCodeyg 、 tblCodeBxlb 、 tblBxmx 三个表(一次只能添加一个表,选中该表后,单击添加按钮) ,之后单击关闭按钮关闭显示表对话框,如下图所示:    表添加后,系统已经自动给我们建好了临时关系,这是因为主表 tblBxmx 内包含于 tblCodeBxlb 和 tblCodeyg 两表同样的字段, 所以,系统已经自动帮我们建好了关系,如果没有的话, 比如建 tblBxmx 与 tblCodeBxlb 的关系, 只需要单击选中 tblBxmx 表的 lbId 字段,按住鼠标左键不松,之后直接拖到 tblCodeBxlb 表的 lbId 字段上松开即可,其结果也是如此图一般。 下一步,分别按顺序双击 tblBxmx 表的 mxId 、 bxrq 字段, tblCodeBxlb 表的 lbmc 字段, tblCodeyg 表的 ygxm 字段, tblBxmx 表的 bxje 、 bxzy 字段,其结果如下图所示:    如上图所示,在所有的下半格的字段行中,为所有的字母字段名称添加中文标签,比如 mxId ,在前面添加一个“ 报销编号 : ”,其结 果就是:“报销编号 : mxId ”(注意:其中的冒号是英文冒号,如果用中文冒号,会出错的) ,其他的字母字段名称都如此操作,注意,添 加的中文标签要与字段说明书里的一致。其结果如下图所示:    由于这个查询比较简单,设计到这里,就算完成了,单击保存按钮(或文件菜单的另存为命令)保存设计,命名为: qryBxmx 。保存 后即关闭此窗体设计视图,给此查询对象属性添加相应的说明。 5.2 基础数据界面的制作 前面已经介绍过基础资料的基础数据界面的制作(即不含查找功能的功能窗体) ,现在我们顺着上面的已经完成的部分继续进行,由于基 础资料部分对窗体的操作已经介绍得很详细了,故在这里将简略介绍,如果有不明白的地方,可以参考基础资料的基础数据界面制作。 定位到窗体窗格,新建一个窗体并进入设计界面,如同前面介绍的那样,打开窗体属性,切换数据选项卡,如下图所示:    单击记录源文本框后面的 三个点的按钮 ,在弹出显示表对话框中,选择查询选项卡(默认是表选项卡) ,如下图所示:    选择 qryBxmx ,之后单击添加按钮,如下图所示:    如前面的介绍的一样,直接双击 qryBxmx 列表框中的 * 号,选择所有的字段,之后单击该设计视图的右上的角的关闭按钮(偏下的 一个,最上面的那个是退出系统的关闭按钮) ,如果操作没有错误的话,则如下图所示:    系统自动在记录源添加了这样的语句: Select qryBxmx.* FROM qryBxmx; ,当然,如果你可以直接写的话,就不用进入刚才的设 计界面,直接书写即可,关闭窗体属性,之后按住 shift 键分别点选浮动数据列表的报销编号和报销摘要,则会将所有字段选中(也可以按    住 Ctrl 键一个一个地点选) ,如下图所示:    按住鼠标左键不松,将所有的字段全部拖放到窗体上去并关闭该浮动数据列表窗口(还可以点击工具栏上的显示字段按钮再次显示) ,如 下图所示:    如上图所示,将所有文本框标签的冒号删除,其结果如下图所示:    修改窗体属性的格式选项卡的默认视图属性,更改为:数据表,并将数据选项卡的记录集类型属性修改为:快照。之后保存设计,命名 为 frmBxmx_child 。 在报销page 17

管理窗格下添加报销管理的导航菜单,如下图所示:    保存之后,赋予管理员相应的权限,之后单击报销管理窗格,之后再击报销管理按钮,如下图所示:    5.3 新增窗体的制作 在基础资料部分,已经介绍了新增窗体的制作,与现在不同的情况是,那只涉及到两个字段的新增(其中还有一个是由系统负责自动产 生数据的字段,实际上说一个字段也可以) ,而当前则涉及到六个字段(也可以说是五个) ,差异很小,因此,我们在这里,对前面提到一致 的部分,就一笔带过,着重讲述不一致的地方。 在进行之前,先进行一个必要的工作,即将 frmBxmx_child 窗体的记录集类型修改成快照(窗体属性 - 数据选项卡 - 记录集类型) 。 之后在数据库窗口,新建一个空白窗体,之后关闭工具箱的向导,之后依次拖拽五个文本框(因为有一个字段的数据将由系统自动产生) , 如下图所示:    依次修改各个文本控件的标签,从上到下分别是:报销日期、 报销类别、员工姓名、报销金额、报销摘要、之后再依次修改各个文本框 的名称属性(属性-其他选项卡-名称) ,从上到下依次是:bxrq 、lbId 、ygId 、bxje 、bxzy ,如下图所示:    为了防止出现计算机故障或者误操作而导致工作丢失的情况,可以现在就保存设计,将窗体的命名为: frmBxmx_child_Add 。 参考基础资料部分的新增窗体的制作过程,进行当前窗体的布局调整和界面美化,并保存,完成之后如下图所示:    之后再按照如基础资料新增窗体那样介绍的一样修改窗体属性, 唯一不同的是将窗体的格式选项卡的标题的属性命名为: 报销明细新增。 其他的都一致。之后进入该窗体的代码编写界面,输入下面的代码: Option Compare Database Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object) Select Case Button Case "保存" cmd_Save Case "关闭" DoCmd.Close End Select End Sub Private Sub cmd_Save() Dim rst As DAO.Recordset If IsNull(Me.bxrq) Then MsgBox "请输入报销日期!", vbCritical, "提示:" Me.bxrq.SetFocus Exit Sub End If If IsNull(Me.lbId) Then MsgBox "请输入报销类别!", vbCritical, "提示:" Me.lbId.SetFocus Exit Sub End If If IsNull(Me.ygId) Then    MsgBox "请输入员工姓名!", vbCritical, "提示:" Me.ygId.SetFocus Exit Sub End If If IsNull(Me.bxje) Then MsgBox "请输入报销金额!", vbCritical, "提示:" Me.bxje.SetFocus Exit Sub End If Me.Refresh If MsgBox("您确认要保存吗?", vbOKCancel + vbInformation, "提示") = vbOK Then Set rst = CurrentDb.OpenRecordset("tblBxmx", dbOpenDynaset) rst.AddNew rst("mxId") = acchelp_autoid("M",10, "tblBxmx", "mxId") rst("bxrq") = Me.bxrq rst("lbId") = Me.lbId rst("ygId") = Me.ygId rst("bxje") = Me.bxje rst("bxzy") = Me.bxzy rst.Update rst.Close Set rst = Nothing '刷新数据 If IsLoaded("usysfrmMain") Then DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child" DoCmd.Echo True End If MsgBox "保存成功!", vbInformation, "提示" Me.bxrq = Null Me.lbId = Null Me.ygId = Null Me.bxje = Null Me.bxzy = Null End If End Sub 大家可以对比一下代码的差异,其实,实质性的差异很小。 进行到这里,下面的工作就与以前的不同,选择报销类别文本框,右键,选择更改为级联菜单的,组合框命令(当初也可以直接拖拽组合框) , 如下图所示:    之后再将员工姓名的文本框也更改为组合框,完成之后如下图所示:    请注意在前面已经修改过的文本框格式选项卡的背景样式的属性已经自动由透明变成了常规,现在重新修改为透明。 之后再次选中报销类别的组合框,激活右键菜单,选择属性对话框,如下图所示:    之后选择属性,在弹出的属性对话框中选择数据选项卡,点选行来源文本框,之后再点选之后出现的 按钮,由于这种的界面我们来过 很多次了,所以,就不再截图,略微叙述一下,点选 按钮进入之后,在弹出显示表对话框中选择 tblCodeBxlb 表(因为我们选择的是报 销类别文本框)添加,之后如前所述说的那样,双击 * 号,表示选择所有字段,如前所述说的那样单击关闭按钮,则会退回到组合框的属 性对话框,并自动在行来源(请注意,是行来源)文本框里生成一段 SQL 语句代码,在当前环境下,是这样的: Select tblCodeBxlb.* FROM tblCodeBxlb; 之后依次在此属性page 18

对话框里修改以下属性: 数据选项卡 绑定列: 1 格式选项卡 列数: 2 列宽: 0cm ; 2cm 列表行数: 20 列表宽度: 2cm 修改完毕之后,关闭属性对话框以便保存修改。至于员工姓名组合框,如报销类别如此这样修改即可。无非是在选择表的时候选择与其 相对应的表,即选择 tblCodeyg 表。其他的属性修改操作完全一致。 到了这里,新增界面的工作就完成了,添加窗体说明,导航和分配权限之后,即可测试其功能如何,之后进入下一步工作。当然,为了 便于操作的目的,还可以进行一些锦上添花的修改,我们在后面将继续叙述。    5.4 修改窗体的制作 同样,在基础资料部分,已经介绍了修改窗体的制作,与现在不同的情况是,那只涉及到一个字段的修改,而当前则涉及到五个字段, 差异很小,因此,我们在这里,对前面提到一致的部分,就一笔带过,着重讲述不一致的地方。 如新增窗体的制作一样,先新建一个新的空白窗体,之后添加五个文本框控件,之后显示窗体页眉页脚,并调整大小,之后如前所叙述 的那样,将相应的 ActiveX_02 窗体中的相应控件拷贝过来,并调整布局,之后保存当前的窗体设计,将窗体按之前提到命名规则,命名 为: frmBxmx_child_Edit ,与新增窗体操作步骤一样的部分,在这里不再重复讲述,调整好的窗体如下图所示:    依次修改各个文本控件的标签,从上到下分别是:报销日期、报销类别、员工姓名、报销金额、报销摘要,之后再依次修改各个文本框 的名称属性(属性 - 其他选项卡 - 名称) ,从上到下依次是: bxrq 、 lbId 、 ygId 、 bxje 、 bxzy ,之后再依次修改各个文本框的 控件来源属性(属性 - 数据选项卡 - 控件来源) ,从上到下依次是: bxrq 、 lbId 、 ygId 、 bxje 、 bxzy (新增窗体不需要设置数 据源,但是修改窗体则一定需要设置数据源) ,如下图所示:    按照以前介绍的方法进行界面的美化工作,完成之后如下图所示:    之后,将报销类别和员工姓名更改为组合框,其行来源和其他属性修改与新增窗体完全一致,完成之后如下图所示:    之后再修改窗体属性: 格式选项卡: 标题:报销明细修改; 滚动条:两者均无; 记录选定器:否; 导航按钮:否; 分隔线:否; 自动调整:否; 自动居中:是; 边框样式:对话框边框; 控制框:否(新增窗体不需要修改这一属性) ; 最大化最小化按钮:无; 关闭按钮:否。 数据选项卡, : 允许添加:否。 其他选项卡: 弹出方式:是; 模式:是。 修改完毕之后,关闭窗体属性对话框保存修改。 如前所述,由于全局变量已经定义,这里就不要再定义了,直接进入 frmBxmx_child 窗体的设计界面,之后右键单击报销编号的文 本框,进入属性界面后,再进入事件选项卡的获得焦点事件的代码输入界面,如下图所示:    在鼠标光标处输入以下代码: On Error GoTo Err_报销编号_GotFocus: selectstr = Me.报销编号 Forms!usysfrmMain!labFind.Tag = 1 Forms!usysfrmMain!btnEdit.Tag = 999 Exit_报销编号_GotFocus: Exit Sub Err_报销编号_GotFocus: Resume Exit_报销编号_GotFocus 其结果如下图所示:    如前所述说的那样,确认无误关闭代码窗口,保存修改,之后再打开该窗体的属性,即 frmBxmx_child 的窗体属性,选择事件选项卡, 在成为当前文本框中输入以下内容: =selectrecord() 。 关闭窗体属性保存输入,关闭 frmBxmx_child 窗体并切换到 frmBxmx_child_Edit 窗体,之后再打开该窗体的窗体属性,选择事 件选项卡,进入加载事件的代码编辑窗口,如下图所示:    在鼠标光标处输入以下代码: Me.RecordSource = "Select * FROM tblBxmx Where mxId = '" & selectstr & "'"    保存输入,之后在该段代码末尾处新起一行,输入以下代码: Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object) If IsNull(Me.bxrq) Then MsgBox "请输入报销日期!", vbCritical, "提示:" Me.bxrq.SetFocus Exit Sub End If If IsNull(Me.lbId) Then MsgBox "请输入报销类别!", vbCritical, "提示:" Me.lbId.SetFocus Exit Sub End If If IsNull(Me.ygId) Then MsgBox "请输入员工姓名!", vbCritical, "提示:" Me.ygId.SetFocus Exit Sub End If If IsNull(Me.bxje) Then MsgBox "请输入报销金额!", vbCritical, "提示:" Me.bxje.SetFocus Exit Sub End If Me.Refresh DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child" DoCmd.Echo True '触发子窗体计时器事件 Forms!uspage 19

ysfrmMain!frmChild.Form.TimerInterval = 300 DoCmd.Close acForm, "frmBxmx_child_Edit" End Sub 完成之后如下图所示:    进行到这里,修改窗体的设计,就基本完成了,添加导航按钮、分配权限之后进行测试,测试成功之后进入下一步。 5.5 返回修改记录的原始定位 第一:如前所述,由于全局变量已经定义,所以,这里的第一步即是之前第二步。在设计视图打开 frmBxmx_child 窗体,之后进入该 窗体的计时器触发事情事件的代码编辑页面,如下图所示:    在鼠标光标处输入以下代码: Acchelp_FindstrRecord (g_CurrentSelectStrID) '计时器执行一次后不再执行    Me.TimerInterval = 0 关闭代码输入窗口以保存修改。 第二:进入 frmBxmx_child_Edit 窗体的代码页面,如果你是按照本教程练习下来的话,会看到有这样的三行代码: Private Sub Form_Load() Me.RecordSource = "Select * FROM tblBxmx Where mxId = '" & selectstr & "'" End Sub 如前所述,在第二行和第三行中加这样一行代码: g_CurrentSelectStrID = selectstr 必要的操作进行到这里,就实际上就已经完成了设置,至于详细的细节,可以参考基础资料的这一部分。 5.6 删除功能的添加 删除功能的制作非常简单。直接进入 frmBxmx_child 窗体的代码编辑页面,新起一行,输入以下代码: Public Sub btnDel() If MsgBox("您确认要删除吗?", vbYesNo + vbInformation, Forms!usysfrmLogin.Caption) = vbYes Then DoCmd.Echo False Call AccHelp_DeleteFldstrRow("tblBxmx","mxId",selectstr) Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child" DoCmd.Echo True End If End Sub 仅此一步,之后照常规添加导航按钮、分配权限即可。 5.7 查询功能的设计与应用 前面基础数据界面的数据源取查询,就是为了这里实现查询,主要因为如果通过查询的界面的字段直接采用英文字段名称的话,并非十 分友好的设计。这会让一般的操作人员比较痛苦,与此同时,也没有必要让普通用户知道实际的字段名称。 查询的功能的添加很简单,直接进入 frmBxmx_child 窗体的代码编辑的页面,如下图所示 :    新起一行,输入下列代码: Public Sub btnFind() DoCmd.OpenForm "usysfrmFind" Forms!usysfrmFind!cobfldName.RowSourceType = "值列表" '文本型对应 3 ,日期型对应 1 ,数值型对于 2 Forms!usysfrmFind!cobfldName.RowSource = "报销日期;1;类别名称;3;员工姓名;3;报销金额;2;报销摘要;3;"    '指定查询数据来源 Forms!usysfrmFind!labDataSource.Caption = "qryBxmx" End Sub Public Sub FindEnd() Forms!usysfrmMain!frmChild.Form.RecordSource = Acchelp_ChildFormRecordSource("qryBxmx", "报销编号", True) End Sub 确认无误,保存修改。之后同时添加查询和导出导航按钮并赋予权限,之后进入报销管理界面,如下图所示:    如上图所示,单击查找按钮(注意到现在导出按钮不可用) ,则如下图所示:    假使在这里,我们要查询张三报销的手机费明细,则依次如此选择或者填写: 字段名:员工姓名;表达式:等于;关键字:李三。 以上选项,连起来的意思就是:员工姓名等于李三。选择完成之后,单击添加条件按钮,则如下图所示:    再依此如下继续选择: 字段名:类别名称;表达式:等于;关键字:手机费;条件:并且(表示这一个条件与上一个条件是并的关系) 。选择完成之后,如下图 所示:    单击添加条件按钮,则如下图所示:    确认符合你的查询要求之后,即可直接单击查询按钮执行查询,如果发现输入有错,则可以单击清除按钮清除代码区的显示,重新设置 查询条件,当前执行查询之后如下图所示:    请注意到这个时候已经显示出了查询结果,并且工具栏上的导出按钮亦已经被激活,单击数据查询的关闭按钮关闭数据查询对话框,就 可以仔细查看结果数据集了,如果你需要将该结果导出,亦是可以的。现在单击关闭按钮关闭数据查询对话框,之后再单击导出按钮,则如 下图所示:    如图所示,本开发平台默认提供四种导出格式,即: Excel 表格格式、记事本page 20

格式、 HTML 网页格式以及 MDB 的 Access 数据库 文件格式,这是本开发平台系统内置的功能,当设置了查询功能之后,该导出功能自动具备。 定义查询结果集导出的目的文件目录(单击导出文件目录之后的省略号 按钮即可通过鼠标单击的方式确定导出目录的文件路径) ,和导 出文件名称,并选择导出文件格式,在本例子中选择如下:    确认之后,单击导出按钮,其结果如下图所示:    我们可以看到,字段名称被自动做为结果集的标题栏,现在就可以对这个 Excel 表格进行随心所欲的编辑了,很好用的查询和导出的功 能。    或许有人会问,如果我想导出所有的数据怎么办,那也很简单,你设置一个所有数据都满足的查询的条件即可,比如日期类(介于两个 日期之间) 、数据类(介于两个数字之间) 、文本型(任何数据都不包含的一个特殊的字符串)都可以很方便地实现这一点。 如果要在查询之后,重新显示全部数据,就当前的例子来说,单击工具栏上的关闭按钮退出报销管理,重新进入即可。 6.1 控件使用说明 进行到这里,新增、修改、删除、查询、导出都已经完成了,只有报表浏览与打印功能尚未完成。我们先稍微停一下,进行一些必要的 优化工作。之所以没有混合到前面的内容一并完成,只要是考虑到了初学者的学习负担的问题,把大问题拆成若干个小问题来分别予以说明, 这样有利于初学者的学习。 6.2 日期控件的使用 新增窗体里的报销日期的输入控件,我们知道这个控件对应的字段是日期型的数据类型,只接受日期值的输入,而日期数据则是有特定 的格式的,对普通操作人员来说,一边输入一边还有注意格式,有些让人为难了。因此如果能将该控件的输入由键盘输入操作改成鼠标点选 操作,那么,因为格式的输入错误而导致的新增失败,则可以得以避免,因此,我们在这里,就进行这项工作。 直接进入 frmBxmx_child_Add 窗体的设计窗体,如下图所示:    如上图所示,选中报销日期控件文本框,将其删除,之后带点选工具箱上的其他控件按钮,如下图所示:    之后如下图所示:    之后,将鼠标停留在下面的倒黑三角数,则该列表自动向下显示,选中其中的这样的一个控件:    选中之后,鼠标就变了形状,在刚才删除报销日期文本框的位置,单击鼠标左键,如下图所示:    点击标签按钮,之后在在日期控件左边花画一个方形并输入报销日期,如下图所示:    如上图所示,报销日期和新添加的日期控件对其他控件不太对称,可以用前面鼠标拖拽的方法调整大小,这个方法,很简单,前面也介 绍过,这里就不再多说了。 调整之后如下图所示:    选中日期控件,之后单击右键,选择属性命令,之后在弹出的属性对话框中,选择其他选项卡,如下图所示:    将名称属性重命名为: bxrq ,之后把 Tab 键的索引更改为 0 ,完成之后关闭对话框保存修改。之后进入该窗体的加载事件的代码编 辑区,在鼠标光标处输入以下代码: Me.bxrq.Value = Date 之后注意到该界面下部有这样的代码: rst("bxrq") = Me.bxrq rst("lbId") = Me.lbId rst("ygId") = Me.ygId 将其中 rst("bxrq") = Me.bxrq 这一行的 Me.bxrq 修改为 Me.bxrq.Value ,再向下看,会看到这样的代码: Me.bxrq = Null Me.lbId = Null Me.ygId = Null    将其中的 Me.bxrq = Null 修改为 Me.bxrq.Value = Date ,完成之后,关闭保存修改。就这样,读者可以对比一下使用日期控件的 优点。这是新增窗体,由于修改窗体显示时,时间数据已经存在了,基本上不存在什么问题,可以不进行优化。这样的控件添加之后,只需 要单击该控件的小三角,就会出现日历,可以自由选择,系统会自动转化成实际的日期数据。 6.3 输入控件的格式调整 我们再回到输入窗体,注意到有一个货币字段,输入货币数字后,显示的是只是一个数字,缺少货币符号的前缀,总感觉有点别扭,在 这里,可以进行调整。 直接进入 frmBxmx_child_Add 窗体的设计窗体,进入报销金额文本框的属性对话框,选择格式选项卡,注意到有一个格式属性,如 下图所示,选择货币格式即可:page 21

    6.4 基础资料的快捷添加 我们现在发现一个现象,就是比如类别名称这一字段,其数据来源是来源基础资料的报销类别,而现在的情况是,如果在报销管理里输 入一个报销明细,却发现其报销类型在报销类别(员工姓名也有这个问题存在)的下拉列表中没有,这个时候,就要退出,到基础资料那边 去输入,显得很麻烦。因此,如果在新增窗体上就现成地增加一个按钮,直接执行添加操作,岂不很好?我们下面就来实现这个设想。 直接进入 frmBxmx_child_Add 窗体的设计窗体,将报销类别和员工姓名两个组合框拉短一点,如下图所示:    进入 ActiveX 窗体的设计界面,将二区的控见分别拷贝到报销类别和员工姓名后面,并适当调整大小以适应整体布局,完成之后如下 图所示:    进入刚添加的报销类别后面的按钮的属性对话框, ,将其名称命名为 cmdBX (属性-其他选项卡-名称) ,同理,员工姓名后面的一个命    名为 cmdYG 。之后进入该窗体的代码编辑界面,新起一行,输入这样的代码: Private Sub cmdBX_ButtonClick(ByVal Button As Object) DoCmd.OpenForm "frm_CodeBxlb_child_Add" End Sub Private Sub cmdYG_ButtonClick(ByVal Button As Object) DoCmd.OpenForm "frmyg_child_Add" End Sub 确保正确之后,退出保存。之后直接 frm_CodeBxlb_child_Add 窗体的编码编辑页面,注意到有这样一些代码: '刷新数据 If IsLoaded("usysfrmMain") Then DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frm_CodeBxlb_child" DoCmd.Echo True End If MsgBox "保存成功!", vbInformation, "提示" Me.lbmc = Null End If End Sub 将以上的代码修改如下: '刷新数据 If IsLoaded("usysfrmMain") Then If IsLoaded("frmBxmx_child_Add") = True Then Forms!frmBxmx_child_Add!lbId.Requery GoTo 100 End If DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frm_CodeBxlb_child" DoCmd.Echo True End If 100: MsgBox " 保存成功 !", vbInformation, " 提示 " Me.lbmc = Null End If End Sub 之后退出保存修改,之后直接进入 frmyg_child_Add 窗体的代码编辑页面,也会看到这样一段代码 : '刷新数据 If IsLoaded("usysfrmMain") Then DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child" DoCmd.Echo True End If MsgBox "保存成功!", vbInformation, " 提示 " Me.ygxm = Null End If End Sub    将上面的代码修改如下 : '刷新数据 If IsLoaded("usysfrmMain") Then If IsLoaded("frmBxmx_child_Add") = True Then Forms!frmBxmx_child_Add!ygId.Requery GoTo 100 End If DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child" DoCmd.Echo True End If 100: MsgBox " 保存成功 !", vbInformation, " 提示 " Me.ygxm = Null End If End Sub 进行到这里,必要步骤的就进行完毕了,可以检测一下实际的功能是否正常。至于是否添加这个按钮,根据情况决定,如果要对基础资 料实现非常严格的权限控制,那么这里就可能不需要设置,因为一旦添加了这个按钮,权限控制就可能成为问题了。 6.5 自动跳转功能 这个功能根据各人的情况来决定,一般适用于组合框和列表框控件,即当组合框获得焦点时自动展开列表,当该组合框点选之后,自动 将焦点定位到下一个输入控件。 直接进入 frmBxmx_child_Add 窗体的设计窗体,进入报销类别组合框的获得焦点事件代码编辑界面,在鼠标光标处输入以下代码 : Me.lbId.Dropdown 之后关闭退出,再进入该组合框的更新后事件代码编辑界面,在鼠标光标处输入以下代码 : Me.ygId.SetFocus 同样,也进入员工姓名的获得焦点事件代码编辑界面,在鼠标光标处输入以下代码 : Me.ygId.Dropdown 之后进入该组合框的更新后事件代码编辑界面,在鼠标光标处输入以下代码 : Me.bxje.SetFocus 如此,这项工作就完成了。初学者可以实际测试一下该功能的实际效果。当然,根据情况,添加不添加此功能就看各人的习惯和爱好了。 7.1 报表制作的说明 报表的制作,通常是一个系统开发的最后进程,通常情况下,也是不可缺少的,在这里,我们设计了一个稍微复杂的报表的样例,考虑 到初学者的实际情况,我们将该过程分拆成三步,即静态报表,动态报表,多个动态报表。 7.2 静态报表的制作 静态报表即是无论执行什么查询, 报表始终不更改, 即是静态的报表, 不能根据动态显示查询的结果, 下面我们就介绍静态报表的制作。 单击报表导航窗格,如下图所示 :    单击选择使用向导创建报表,之后再单击新建按钮,如下图所示 :page 22

    选择报表向导,之后再下面的组合框里选择 qryBxmx ,如下图所示 :    单击确定按钮,则如下图所示:    将上图中的可用字段列表中的类别名称和报销金额移动到选定字段列表,如下图所示:    单击下一步按钮,如下图所示:    双击类表名称进行分组,即按类别进行分组,如下图所示:    继续单击下一步按钮,如下图所示:    在排序列表框序号为 1 的列表框中选择报销金额,之后可以单击后面的升序按钮更改排序类别,可以在升序和降序之间自由切换;之后 再单击汇总选项按钮,则如下图所示:    单击选中报销金额的汇总复选框,之后在显示选项区选择仅汇总单选按钮,即我们在这里不需要显示详细的明细数据,只显示一个汇总 数据即可,之后再选择计算汇总百分比按钮,如下图所示:    单击确定按钮,如下图所示:    再次单击下一步按钮,如下图所示:    在这里,不做修改,直接下一步,如下图所示:    在这里,不做修改,直接下一步,如下图所示    如上图所示 ,直接单击完成按钮,则如下图所示:    单击左上方按钮切换到设计视图,则如下图所示 :    将默认的 qryBxmx 的标签更改为按报销类别统计报表,并适当调整格式,如下图所示:    之后进入该报表的报表属性中(与进入窗体属性的方法一致) ,选择其他选项卡,选择工具栏中 rptToolBar 选项,如下图所示:    保存修改,关闭报表,将报表的名称从默认的 qryBxmx 更改为 rptBxmx 。之后切换到窗体窗格,直接进入 frmBxmx_child 窗体 的代码编辑界面,如下图所示:    这里已经频繁来过很多次了,新起一行,输入以下代码: Public Sub btnPrint() DoCmd.OpenReport "rptBxmx", acViewPreview End Sub 输入完成之后,保存修改,之后添加报销管理按钮的打印属性并分配“打印”权限,现在进入报销管理的界面就会发现多了一个“打印” 的按钮,如下图所示:    再随意增加几条测试数据,如下图所示:    之后单击“打印”按钮,则如下图所示:    这就是静态报表的效果,无论在前台如何进行查询条件的设置,比如,仅仅查询车费,想让报表只显示有关车费的报表,或者只显示某 一个人的报表,这种报表是做不到的,它只根据当前数据库中所有的数据进行统计产生一张符合当前数据库中的所有记录相适应的报表,这 种报表,虽然会根据当前数据库总体的记录情况自动修正报表,但是不能根据用户临时的特定的查询生成报表,显得比较呆板,所以,我们 称为静态。下面,我们将在当前的基础上进行动态报表的进一步制作。 7.3 动态报表的制作 我们接着上一小节继续进行。第一步:单击模块窗格,进入 variable 模块的代码编辑界面,如下图所示:    新起一行,输入以下代码: '在模块中声明报表数据源的全局变量 Public strRptReSource As String 保存输入,关闭模块。 第二步:切换到窗体选项卡,直接进入 frmBxmx_child 窗体的代码编辑界面,会看到有这样一段代码: Public Sub FindEnd() Forms!usysfrmMain!frmChild.Form.RecordSource = Acchelp_ChildFormRecordSource("qryBxmx", "报销编号", True) End Sub 如上所示,在第二行与第三行中加这样一行代码: ' 记录下来报表的数据来源 strRptReSource = Forms!usysfrmMain!frmChild.Form.RecordSource end sub 整段代码实际上就是给修改正了这个样子: Public Sub FindEnd() Forms!usysfrmMain!frmChild.Form.RecordSource = Acchelp_ChildFormRecordSource("qryBxmx"," 报销编号    ", True) '记录下来报表的数据来源 strRptReSource = Forms!usysfrmMain!frmChild.Form.RecordSource End Sub 确认输入无误后,保存输入并关闭该窗体。 第三步:切换到报表窗格,进入 rptBxmx 报表设计界面,打开报表属性,单击事件选项卡,进入打开事件的代码编辑界面,如下图 所示:page 23

    在鼠标光标处输入以下代码,如下图所示: '赋上查找后的报表数据源 If strRptReSource = "" Then Me.RecordSource = Forms!usysfrmMain!frmChild.Form.RecordSource Else Me.RecordSource = strRptReSource End If 保存输入,关闭报表,就这样,动态报表的制作就完成了。可以实际测试一下,比如,我们在报销管理界面,执行类别名称等于住宿 费的查询,之后再单击预览按钮,如下图所示:    现在大家就会发现现在的报表与之前的报表的不同之处,之前的报表无论你如何更换查询条件,单击预览按钮之后,报表始终是一样 的,而现在则可以随查询条件的不同而不同,从这个意义上说,之前的报表即是静态报表,当前的可以称为动态报表。 当前的报表是基于类别进行的统计的,如果我想浏览或者打印按人员进行的统计的报表,又该如何做呢?如何让系统提供一个可以切 换的面板呢?我们在下一节将着手解决这个问题。 7.4 动态报表切换面板的制作 继续上一节的操作,切换到报表窗格,参照静态报表的制作,再利用向导建立一个只包含“员工姓名”和“报销金额”的查询,除了所选的 两个字段与之前不一样外, 其他的全部一样, 完成之后, 修改报表的页眉, 并将报表名称命名为: rptBxmx_yg , 完成之后, 如下图所示 :    现在制作出来的是静态报表,还需要进行该报表的动态改造,参照动态报表制作的那一小节,可以发现,前两步都是所有基于该窗体的 所有动态报表所通用的,唯有第三步,是从属于各个报表的特性,参照动态报表的制作,我们直接进入该报表的打开事件编辑界面,输入以 下代码 : If strRptReSource = "" Then Me.RecordSource = Forms!usysfrmMain!frmChild.Form.RecordSource Else Me.RecordSource = strRptReSource End If 完成之后如下图所示 :    其实,这里录入的代码和另一个报表的代码是完全一致的。确认输入无误之后,保存录入并关闭报表。 好了,已经设计完成了两个动态的报表,现在就该设计一个中转的切换面板,可以使用户在查询之后选择要浏览的报表的种类或者未经 查询就直接浏览的报表种类。记得在前面静态报表的时候,我们在 frmBxmx_child 窗体的代码页面 录入过这样的一段代码 : Public Sub btnPrint() DoCmd.OpenReport "rptBxmx", acViewPreview End Sub 这段代码的意思就是说,当单击预览按钮的时候,就直接打开 rptBxmx 报表,但是我们现在有两个报表,因此,这样的场景的情况下, 无法使一个按钮直接与两个报表相对应,试想一下,如果我们单击这个按钮的时候打开一个窗体,通过这个窗体来选择显示哪一个报表,这 样一来,问题就可以得到解决,因此,鉴于此窗体的实际用途,我们可以将其称为切窗体,或者切换面板。在当前场景下,我们将该切换窗 体的名称事先定义为 : frmBxmx_child_rpt ,则应该将 frmBxmx_child 窗体的代码如下的一段代码修: Public Sub btnPrint() DoCmd.OpenReport "rptBxmx", acViewPreview End Sub 改为:    Public Sub btnPrint() DoCmd.OpenForm "frmBxmx_child_rpt" End Sub 这样一改,其意思就是说,当单击预览按钮的时候,就自动打开我们实现定义的 frmBxmx_child_rpt 的报表切换窗体,下面,我们就 来设计这个切换窗体。 新建一个窗体,将其名称定义为 frmBxmx_child_rpt ,之后进入窗体属性,进行以下属性设置: 格式选项卡: 标题:无默认值,输入以下字符:请选择您所要浏览的报表; 滚动条:默认值为两者都有,修改为:两者均无; 记录选定器:默认为是,修改为:否; 导航按钮:默认为是,修改为:否; 分隔线:默认为是,修改为:否; 自动调整:默认为是,修改为:否; 自动居中:默认是否,修改为:是; 边框样式:默认为可调边框,修改为:对话框边框; 控制框:默认为是,修改为:否; 最大化最小化按钮:默认为两者都有,修改为:无。 关闭按钮:默认为是,修改为:否; 其他选项卡: 弹出方式:默认为否,修改为:是。 请注意一点,在这里,多数的属性修改与前面讲的新增修改的属性修改基本一致,但是有一点请特点注意,前面的窗体属性设置,无论 是新增窗体还是修改窗体,均修改了其他选项卡的模式属性,将其从默认值否,修改为是,但是在这个切换面板的场合,此属性切不可修改, 否则,会出现莫名其妙的问题——虽然不致于让系统无法使用,但是毕竟显得太不合理了,有兴趣的可以试试是什么效果。修改完毕之后, 关闭窗体属性对话框保存修改。 单击工具箱上的选项组按钮 ,之后在窗体上选择适当位置放置,如下图所示:    删除该选择组的标签,之后再单击工具箱中的选项按钮按钮 ,即单选按钮按钮,放置两个于选项组区域内,如下图所示page 24

    由于单选按钮默认带了一个标签控件,我们就先修改其携带的两个标签,将第一个名为 Option2 标签修改为:按报销分类统计报表浏 览,将第二个名为 Option4 标签修改为:按员工姓名统计报表浏览,并调整各个控件在窗体上的布局,如下图所示:=    单击工具箱上的命令按钮按钮 ,在选项组控件下面放置两个命令能按钮,将第一个命令按钮命名为确定,将第二个命令按钮命名为取 消,如下图所示    基本布局已经基本完成,现在进行属性修改: 第一:打开选项组的属性,选择其他选项卡,将默认的 Frame0 名称修改为 Select_rpt ,如下图所示    第二:打开单选按钮“按报销分类统计报表浏览”的属性,选择数据选项卡,将选项值由默认的 1 修改为 7 ,如下图所示    同理,将“按员工姓名统计报表浏览”单选按钮的该选项值修改为 8 ; 第三:打开命令按钮“取消”的属性,选择其他选项卡,将名称属性修改为 cancel ,如下图所士:    之后切换到事件选项卡,进入单击事件的代码编辑页面,如下图所示:    在代码光标处输入以下代码: DoCmd.Close 输入之后保存,并关闭代码输入页面,关闭“取消”的控件属性,之后打开确定按钮的属性,将其它选项卡的名称修改为 OK ,如下图所 示:    之后切换到事件选项卡,进入到单击事件的代码输入界面,如下图所示:    在鼠标光标处输入以下代码: Select Case Me.Select_rpt Case 7 '预览报表 - 按报销类别 DoCmd.OpenReport "rptBxmx", acViewPreview Case 8 '预览报表 - 按员工姓名 DoCmd.OpenReport "rptBxmx_yg", acViewPreview End Select DoCmd.Close acForm, "frmBxmx_child_rpt" 请注意蓝颜色的个性化参数,我们对照前面的本小节的第一步和第二步,就会发现第一步和第二步做的属性设置在这里得到了反映,其 实,前两步不修改其属性也是可以的,之所以修改,就是为了让初学者能读懂这一段重要的代码,明白那里的属性和这里代码的对应关系。 保存输入,之后关闭代码输入界面,并关闭属性对话框,之后按之前所学的方法,调整该窗体运行时的实际显示大小,如下图所示:    调整完成之后,所有的实际设计工作也就完成了。关闭该窗体,给该窗体增加说明:报销明细 - 报表切换面板。 我们可以测试一下,我们先进行查询,比如,查询李三的所有报销明细,如下图所示:    关闭数据查询对话框,单击打印按钮,则如下图所示:    选择“按报销分类统计报表浏览”,之后再单击确定按钮,则如下图所示:    如果选择“按员工姓名统计报表浏览”,之后再单击确定按钮,则如下图所示:    的确如我们起初预料的那样,动态报表的切换面板的工作圆满完成。我们在这里设计的是两个报表的切换,如果你有多个查询要求,可 以设计三个乃至更多个报表的切换面板,原理和两个报表的切换是一样的。 顺便多说一句,我们一直没有讲打印,事实上当以上的预览的报表出来之后,只需要直接单击工具栏上的 按钮就可以直接执行打印工    作。如果你看不到这个按钮,检查一下该报表属性,即检查该报表属性的其他选项卡的工具栏属性,检查一下,其值是否等于 rptToolBar , 如果不是这个值,那么,你很可能看不到打印按钮。 第八章 控制面板 8.1 部门以及用户组权限 本系统内置非常完善的权限控制体系,以减轻您的开发难度、保护您的系统安全。每一个系统用户都必须从属于一个权限组,而一个权 限组则必须从属一个部门,在权限体系中,部门是用来规划规划组的,本身不具有权限属性,而系统用户必须从属于权限组,也不具有任何 权限属性,只有权限组才拥有实际的意义,也就是说,您如果希望给某一个系统用户定义特殊的权限,您无法直接给这名成员赋予权限,而 只有新建一个用户组,给这一个用户组赋予权限,之后再在这个组的属性里新建用户,此时,这个用户就会自动获得该权限组所有的权限。 我们在这里,以一个示例来说明 , 比如,给普通的员工以查询的权限。首先进入权限组设置界面,如下图:    点击部门及组权限按钮,如下图所示:    单击新增按钮,选择新增部门,如下图所示:page 25

    输入部门名称为“普通部”,点击保存按钮 后 , 关闭新增权限组对话框,之后再次单击新增按钮 ,选择新增组命令,如下图所示:    此时在部门名称中选择普通部,之后在组别名称中输入常规查询组,点击保存按钮 ,关闭新增权限组对话框。 依次单击普通部,常规查询查询组,如下图所示:    之后再单击修改按钮,如下图所示:    这个界面我们已经来过了,选择常规权限,并单击确定按钮,如下图所示:    之后再选择报销管理,选择报销管理按钮,在权限设置选项目区选择打开和查找复选框,如下图所示:    点击保存按钮并确认添加权限的提示框保存修改 ,关闭部门及用户组权限设置对话框。这样一来,我们就新建了一个具有查询权限的权 限组,那么,每一个在该权限组下新建的用户,都将具有该权限组应该具有的属性,如果要调整权限,只需要调整权限组即可。之后点工具 栏上的关闭按钮,退出部门及用户组权限设置对话框。之后单击用户管理按钮,如下图所示:    单击新增按钮,如下图所示:    分别输入:工号: 002 ,姓名:李六,密码: 123 (正式场合可以要设置比较复杂的密码) ,部门选择普通部,权限组别选择常规查 询组,之后保存修改并退出系统,使用新建的 002 工号登录系统,会发现该员工只拥有系统管理里面的修改密码权限(系统自动赋予,任 何用户都将自动拥有) ,以及报销管理的查询权限(如果不赋予打开的权限,则该工号对应的用户将无法打开该窗体,因此,打开的权限, 在正式的赋权场合都应该赋予,除非你禁止了该用户对该对象的所有权限) ,如下图所示:    最后请注意,在这里的部门、用户、和用户和实际的公司的部门没有任何直接联系,在这里只是为了权限管理的需要,你只需要为每一 个要使用本系统的员工新建一个用户工号即可,并不需要为不使用本系统的员工各自新建工号。 8.2 备份与恢复数据库 请注意,在系统管理导航菜单命令区有一个备份数据按钮,如下图所示:    单击备份数据按钮,将会弹出如下图所示的提示:    此时,单击确定,则会退出系统,而单击取消,则会显示登录系统界面,重新登录系统即可正常使用。备份完成之后,在项目程序文件 路径目录里会多出一个以 .bak 的文件,当前日期加上 Data 做为文件名,如下图所示:    在本示例中,20081021Data.bak 就是执行备份命令之后所产生的备份文件,该文件即包含了当前所有的数据,将该文件妥善保存, 即可以保证您截止到你备份的时候的数据不会丢失。 如果您需要恢复数据,请按下列步骤操作: 第一:定位到程序目录; 第二:删除 AccDev_be.mdb 文件(即后台数据库文件,该文件可以任意命名和存放在任意路径) ; 第三: 将备份文件重命令为 AccDev_be.mdb 文件 (即你删除的后台数据库文件名称) 复制到后台数据库文件的原始目录即可, , 当然, 也可以复制到任意位置重新在前台数据库文件重新设定后台数据库文件的位置(这一点,在登录 Access 开发平台前台客户端这一小节已经 有所说明) 。 如此简单的几步,即完成了数据的恢复操作,您此时务必使用旧的工号和密码才能登录系统。每次重新恢复数据之后,在备份之后产生 的新的用户将全部丢失。也就是说,恢复是整体恢复,包括用户和密码。因此,保证备份文件的安全,也是保证数据安全的重要的一环。 8.3 密码管理 如果您要修改自己的密码,请登录系统后,点击系统管理,再单击修改密码按钮,如下图所示:    之后键入当前密码和输入两次新密码,单击 保存按钮 即完成密码的修改。 如果您是管理员,要为他人重新设置密码,请单击用户管理按钮,如下图所示:    选中您要重置的用户名,如下图所示:    之后单击修改按钮,如下图所示:    在此界面单击密码框后面的复位按钮,则会弹出提示,如下图所示:    如果确认修改,该用户的密码将被设置为 123456 ,单击取消则放弃修改。重置密码之后,被重置密码的用户可以使用 123456 的新 密码登录,之后就利用系统管理的“修改密码”修改密码(如前所示) 。 8.4 选项设置 如果你留心,会发现此前一直没有设置软件名称,这对一个成品软件或者商业软件来说,是不被允许的。如果您要进行程序的个性化设 置,请登录系统后,点击系统管理,再单击选项设置按钮,如page 26

下图所示:    本界面一共有两个选项卡,我们先讲常规选项卡,按照你的个性化要求,依次输入各项数据,本例的输入如下图所示:    输入完成之后,单击保存设置按钮保存输入,之后单击关闭按钮保存修改    单击关于命令,则如下图所示:    在这里,可以在“双击此更改客户名称”处设置客户名称,同时,注意到其他位置的提示,与在选项设置的常规页面输入的信息是一致的, 这里的信息显示,是根据选项设置的常规页面输入的信息动态更新的。 我们再回到刚才录入软件信息的选项设置界面,刚才是在常规选项卡进行的设置,现在单击安全选项卡,如下图所示:    注意到只有一个与 SHIFT 键是否禁用的选项设置,我们在前面的开发过程中,一再提到按住 SHIFT 键双击打开程序文件(前台程序 文件)才能进行程序的开发——在进行了必要的启动选项设置之后(本开发平台默认已经进行了这方面的工作) ,只有按住 SHIFT 键打开 程序文件才能进入设计界面, 也就是说, 在默认情况下, 按住 SHIFT 键就可以进入设计界面, 因此, 如果在程序开发完成之后, 如果 SHIFT 键的功能仍然有效,那么,将对程序的安全性造成威胁,也就是说,在开发完成之后,管理员在分发版本之前,就需要先禁掉 SHIFT 键的 这个特殊功能,在我们的开发平台中,已经默认集成了这个功能,只需要将此禁用的复选框选中即可。如果日后涉及到程序修改,只需要使 用管理员帐号登录系统将此禁用取消,即可按住 SHIFT 键进入设计界面进行编辑。 第九章 平台函数 9.1 平台函数说明 平台函数是指 Access 开发平台为了减轻开发难度,提高开发效率而开发的一系列实用、强大的自定义函数,我们在这里,只列举解 释一些比较基础和一些比较常用的平台函数,并不包含全部的平台函数。 9.2 自增序号    AccHelp_AutoID 自增序号函数 功能: AccHelp_AutoID 函数可用于自动编号,例如: B00001 B00002 B00003 …… 语法: AccHelp_AutoID(prefixion As String, IDlength As Integer, tblName As String, fldName As String) prefixion 编码前缀 , 如果不需要前缀,可用 "" 代替,如 AccHelp_AutoID("",5," 表名称 "," 字段名称 ") IDlength 编码位数 tblName 表名称 fldName 自增序号的字段名称 示例: '假定我们有表 tbl 部门代码表,其中有字段 DepaID( 部门代码 ) Debug.Print Call AccHelp_AutoID("D",2,"tbl 部门代码表 ","DepaID") '则产生的结果就是: ' D01 ' D02 ' D03 ' …… 9.3 定位记录 Acchelp_FindNumRecord 函数 ( 定位数字型 ) 功能: Acchelp_FindNumRecord 函数可用于定位某条记录。 语法: Acchelp_FindNumRecord (n) ,比如 n=3 时,即可以定位 3 这条记录。 示例: '在修改窗体的关闭事件中写下列代码: '假定当前修改的 ID 变量是 RecID, 则 Forms!usysfrmMain!frmChild.Form.ID.SetFocus' 这个 ID 要根据你子窗体中的实际字段名称而定 Acchelp_FindNumRecord (RecID) Acchelp_FindStrRecord 函数 ( 定位文本型 ) 功能: Acchelp_FindStrRecord 函数可用于定位某条记录。 语法: Acchelp_FindStrRecord (M) ,比如 M=H0003 时,即可以定位 H0003 这条记录 ,M 为文本型。 示例: '在修改窗体的关闭事件中写下列代码: '假定当前修改的 ID 变量是 StrID, 则 Forms!usysfrmMain!frmChild.Form.ID.SetFocus' 这个 ID 要根据你子窗体中的实际字段名称而定 Acchelp_FindStrRecord (StrID) 9.4 获得字段的名称 Acchelp_GetColumnName 函数 功能: Acchelp_GetColumnName 函数可用于获得表或查询中的字段名称,用分号隔开,用于组合框或列表框的行来源,组合框或列表 框的行来源类型必须选择值列表。 语法: Acchelp_GetColumnName(" 表或者查询名称 ") 示例 : Dim strSQL as string strSQL = Acchelp_GetColumnName("tbl 销售明细 ")    Debug.Print strSQL 9.5 判断生日到期天数 功能: Acchelp_Birdays 函数获得离生日到期天数。 语法: Acchelp_Birdays( 出生日期 , 目标日期 ) 示例: '假定某人的出生日期为 1989-2-1 , 目标日期为 2006-3-3 Dim x as Integer Dim sDate as Date Dim eDate as Date sDate = # 2/1/1989 # eDate =#3/3/2006# x =Acchelp_Birdays(sDate,eDate) Debug.Print x 9.6 获得年龄 Acchelp_ages 函数 功能: Acchelp_ages 函数获得年龄。 语法: Acchelp_ages( 出生日期 , 当前日期 ) 示例: '假定某人的出生日期为 1989-2-1 Dim x as Integer Dim sDate as Date sDate = # 2/1/1989 # x =Acchelp_Birdays(sDate,Date) Debug.Print x 9.7 判断表page 27

是否存在 fExistTable 函数 功能: fExistTable 函数可用于判断当前数据库中是否存在某个表。 语法: fExistTable(" 表名称 ") ,如果返回值为 True, 则表示该表存在,如果返回值为 False, 则表示该表不存在。 示例: If fExistTable("tbl 销售明细 ")=True Then Msgbox " 该表存在 " Else Msgbox " 该表不存在 " End If 9.8 判断表中是否存在记录 功能: CheckRecords 函数可用于判断某表中是否存在记录。 语法: CheckRecords(" 表名称 ") ,如果返回值为 True, 则表示该表有至少一条记录,如果返回值为 False, 则表示该表没有记录。 示例: '我们假定有表 tbl 销售明细 If CheckRecords("tbl 销售明细 ")=True Then Msgbox " 该表存在记录 " Else Msgbox " 该表不存在记录 " End If    9.9 删除记录 AccHelp_DeleteFldNumRow 函数(删除数字型) 功能: AccHelp_DeleteFldNumRow 函数根据某字段条件删除某表中某个字段符合条件 ( 必须是长整型数字 ) 的记录 , 一般用于根据 序号来删除表中的一条记录,亦可删除满足条件的多条记录。 语法: AccHelp_DeleteFldNumRow(" 表名称 "," 条件字段名称 ", 数字型变量 ) 示例: '下面的代码将删除表 tblSale 中字段 ID 中的值等于 100 的记录 Call AccHelp_DeleteFldNumRow("tblSale", "ID", 100) AccHelp_DeleteFldStrRow 函数(删除文本型) 功能: AccHelp_DeleteFldStrRow 函数根据某字段条件删除某表中某个字段符合条件 ( 必须是文本型 ) 的记录 , 一般用于根据文 本来删除表中的一条记录,亦可删除满足条件的多条记录。 语法: AccHelp_DeleteFldStrRow(" 表名称 "," 条件字段名称 ", 文本型变量 ) 。 示例: '下面的代码将删除表 tblSale 中字段 conID 中的值等于 S00005 的记录 Call AccHelp_DeleteFldStrRow("tblSale", "conId", "S00005") 9.10 判断表中字段存在某值 功能: Acchelp_StrDataIsExist 函数可用于判断某表中某个文本型字段是否存在某个值。 语法: Acchelp_StrDataIsExist(" 表名称 "," 字段名称 "," 文本值 ") ,如果返回值为 True, 则表示该表该字段中存在这个文本值, 如果返回值为 False, 则表示不存在。 示例: '我们假定有表 sys_tblMenu If Acchelp_StrDataIsExist("sys_tblMenu", "menuName", " 菜单二 ") = True Then MsgBox "sys_tblMenu 表中 menuID 字段中存在菜单二 " Else MsgBox "sys_tblMenu 表中 menuID 字段中不存在菜单二 " End If Acchelp_NumDataIsExist 函数 功能: Acchelp_NumDataIsExist 函数可用于判断某表中某个数字型字段是否存在某个值。 语法: Acchelp_NumDataIsExist(" 表名称 "," 字段名称 ", 数值 ) ,如果返回值为 True, 则表示该表该字段中存在这个文本值, 如果返回值为 False, 则表示不存在。 示例: '我们假定有表 sys_tblMenu If Acchelp_NumDataIsExist("sys_tblMenu", "menuID", 1) = True Then MsgBox "sys_tblMenu 表中 menuID 字段中存在 1" Else MsgBox "sys_tblMenu 表中 menuID 字段中不存在 1" End If 第十章 常见问题 10.1 ToolBar 控件图片与文字显示不正常 一、问题描述: 有些学员在使用《ACCESS 通用开发平台》时,那些新增、修改、隐藏 …… 关闭按钮有时显示正常,有时显示时,只显示图片不显示 文字。 二、解决方法: 将 《ACCES 开发平台》 文件夹下的 MSCOMCTL.OCX 文件替换计算机的 C 盘下的 C:\WINDOWS\system32( 这是我的电脑 ) 文    件夹中的同名文件,如找不到这个同名文件,可以搜索你电脑中 MSCOMCTL.OCX 文件的存放地址,然后替换它。    10.2 表达式“鼠标移动”产生错误 一、问题描述: 登录系统后,鼠标一移动即出现如下图的错误提示:    二、解决方法: 引起该错误的原因是引用中 OLE Automation 优先级不对,详情请参考本教程第 3 章的 3.5 节 检查控件引用完整性和引用顺序。    10.3 如何取消 Access 2003 的安全警告 如果您的 Office 企业版的版本是 2003 ,当您启动 Access 2003 应用程序时如果显示如下界面,则说明您的宏安全级别较高:    欲解决这个问题,详情请参考 Access 开发平台的运行环境。    10.4 日期控件的显示异常问题 由于本教程采用了日期控件,在迁移或重新安装系统之后,含有该控件的窗体可能会出现异常,可能的故障会如下图所示:    当出现这个界面时,单击结束按钮,则如下图所示:    在这里, 可以很清楚地看到, 由于报销日期采用了日期控件, 此时显示出现page 28

异常。 解决这个问题的办法就是双击程序目录下的注册控件.bat 文件即可。 但是此刻有一个注意事项必须引起牢记,那就是这个程序目录的文件夹不可以放在桌面上,这是因为桌面的文件路径中有一段 为“ Documents and Settings ”,因为这个路径名称中出现了空格,会影响批处理文件的执行,因此如果这个程序目录的文件夹放在桌面 上,那么,这个故障不一定能解除。 第十一章 结束语 11.1 结束语 课程进行到这里,想必您已经对本开发平台的特点已经有所了解了,作为当今国内唯一款基于 Access 开发的成熟的平台系统,想必 您自己会有所选择。 如果您想进一步学习该平台,那么可以登录我们的技术站点和我们的官方网站查看与我们的商业开发培训的相关的信息,以决定是否进 一步学习,如果你试图以此平台系统来做为赢利的手段,开展计算机培训或者软件开发等多种业务,那么,也可以和我们取得联系以便进一 步商洽。 上海盟威软件官方站点: http://www.umvps.com 上海盟威软件技术站点: http://www.accessoft.com    至此,教程学习完了,大家有不熟悉的地方可以再反复练习几次, 然后也可以试着给公司开发开发一些系统,有需要继续提高的 支持服务方面的 也欢迎大家报名本网站的培训    或者需求技术    学习比较好的爱好者并且能够给公司开发了系统    有需要联机更多台数或者互联网使用方面需求的,也可以考虑升级平台的企业版(SQL    server 版),以加强软件功能的更全面使用(注:企业版支持互联网使用功能,适合有分公司在使用该软件的)page 29

2024年2月28日发(作者:弘英彦)

    本文由lisongjia123贡献    doc1。    第 1 章 Access 开发平台概述 1.1 Access 开发平台是什么? Access 开发平台是 Access 开发利器,Access 开发平台专业版是免费的。 Access 开发平台(又称 UMV 开发平台)是由上海盟威软件有限公司研发的一款开发平台,该平台集成了大量的常用功能模块,可以让 Access 开发人员降低开发难度、节省开发时间,以最快的时间让软件投入实际应用中,最终达到以下三大目标: 一是协助单位把适合自身企业的管理思想通过计算机系统得以实际的应用,摆脱对特定软件公司的依赖、降低企业的经营成本,提高企业 的灵活应变能力; 二是协助个人从管理人才向“精管理,懂编程”的复合型人才的转型; 三是协助个人提高自身的素质与职业竞争力,提升自己的职业素养和信息数据的处理能力。 1.2 Access 开发平台可用来做什么? 1.2.1 中小企业老板 采用 Access 开发平台,艾盟威软件公司将为您的公司培养开发人员,由贵公司开发人员来开发公司软件,可以达到低成本、可持续性 改进的作用,摆脱对特定软件公司的依赖。(适于广大中小企业老板) 1.2.2 经理人员 采用 Access 开发平台,艾盟威软件公司将为您的部门培养开发人员 1 名(或者您自已),由贵部门开发人员或您来开发本部门用软件, 可以达到低成本、可持续性改进的作用,从而实现本部门信息化,让您的部门走在其它部门的前面,实现您的管理思路,提高工作效率。(适 于大中型企事业单位的中层干部) 1.2.3 科室人员 采用 Access 开发平台,您可以将您所熟悉的业务开发成软件,让领导、同事共享信息,提高工作效率,从而获得领导赞赏、同事的尊 重,提高职业竞争力。(适于大中型企事业单位的科室人员,如计划员、市场分析员、生产销售管理人员、统计员、会计等,包括所有经常 使用 EXCEL 来处理工作的人员) 1.2.4 IT 人员 采用 Access 开发平台,您可以为单位开发软件,从而获得领导赞赏、同事的尊重,提高职业竞争力。(适于大中型企事业单位的 IT 人 员,如网络管理员、IT 维护人员等) 1.2.5 学生 掌握一项上面四种人士都要掌握的技能,现在就投入时间学习并掌握它,可以为将来的职业发展打下良好的基础。 1.3 Access 开发平台如何使用? 1.3.1 个人自学 自学不会涉及到艾盟威软件公司的任何精力,所以可以免费学习这项技能,在自学过程中可利用的免费资源有: 1. 报销案例教程 2. Access 软件网论坛,网址为:http://www.accessoft.com 1.3.2 参加培训 参加培训会得到培训资源和艾盟威软件公司工程师的帮助,培训需要交纳培训费用,详见培训招生简章,网址: http://www.umvps.com/Training.asp。 培训资源为:微软最有价值专家讲师、培训专用论坛、培训专用 QQ 群、即时在线技术支持等。 1.3.3 自学与培训的区别 培训与自学相比,参加培训解决了两个问题:一是可得到有经验的老师对您的学习进行合理规划;二是学习过程中碰到困难可以立即得 到解决。 参加培训的优点是节省学习时间成本,自学的优点是节省培训费用。 1.4Access 开发平台可行性分析 1.4.1 Access 开发平台概述 ACCESS 开发平台是一个基于 Access 开发的计算机编程开发工具,使用这个工具可以让非计算机专业人员经过短期培训后,可以非常 容易地开发出专业、实用的管理软件;计算机专业人员经过培训后,可以大大降低软件的开发时间成本,缩短开发周期。最终达到以下三大 目标:    一是协助单位把适合自身企业的管理思想通过计算机系统得以实际的应用,摆脱对特定软件公司的依赖、降低企业的经营成本,提高企业 的灵活应变能力; 二是协助个人从管理人才向“精管理,懂编程”的复合型人才的转型; 三协助个人提高自身的素质与职业竞争力,提升自己的职业素养和信息数据的处理能力。 ACCESS 开发平台的实际需求在哪里呢? (一) 当前广大企事业单位中,各类管理人员(包括和数据打交道的人士)在广泛地使用 EXCEL 等软件来处理日常工作,统计数据、制作 报表。然而,随着管理的深入,EXCEL 电子表格软件并不能很好的满足管理的需要,管理人员对工作效率提出了更高的要求,他们需要适 合自已管理需要的特定的软件来达到特定的目标,而各类软件公司由于在软件费用、灵活度、及时性、实用性等方面很多时候都无法满足这 些需求; (二) 大量的中小型企业,由于经费有限,也无法进行或者不愿意进行大规模的信息化建设投入; (三) 由于当前学校的体制问题,大量的计算机专业和非专业人员,并没有实际掌握一种成熟的软件设计能力; (四) 信息化时代的大量个人,对于繁杂的个人信息无法协调很好的协调处理,而从经济的角度来考虑,不太可能去大量订购各类信息系 统用于数据处理。 以上的四条信息表明,人们对一page 1

种易用的、强大的、廉价的开发工具的需求,是多么的迫切——易用的、强大的、廉价的这三个条件,缺 一不可,这样的工具存在吗? ACCESS 开发平台就是这样的一个开发工具, 它的问世, 将为众多的计算机的和非计算机的专业人员带来福音、 将为中国的信息化建设, 做出自己的贡献。    1.4.2 ACCESS 开发平台简介 一、Access 简介 Access 是微软 Office 办公套件中一个极为重要的组成部分。 起初 Access 是一个单独的产品, 后来微软发现如果将 Access 捆绑在 office 中一起发售, 将会带来更加可观的利润, 于是 Access 第一次出现在 office97 中, 成为 office 套件中的一个重要成员。 现在它已经成为 Office 办公套件中一个不可或缺的部件——截止到 2005 年 7 月,微软的 Office 已经出售超过四亿套,而在 2005 年国内办公软件市场的数据统 计中,微软 Office 市场占有率最高,达到 71.22%,而据美国一家独立研究机构统计,微软 Office 的市场占有率在 90%以上——由此可 见 Access 的普及之广,现有用户群之庞大。 由于微软公司持续投入大量人力和资金进行技术改进和创新,因而 Access 的新版本功能已经变得越来越强大——随着版本的升级, Access 的使用也变得越来越容易。以往很繁琐的工作现在只需几个很简单的步骤就可以高质量地完成了。 一些不了解 Access 的人士误以为 Access 只能用来做数据存储,其实 Access 不但可以用来做数据存储,还具有非常强大的开发能力, 利用各种控件和 VBA 语言,能开发出功能十分强大的软件系统,与此同时,其廉价、易用的特性更是其他任何开发工具所不能比拟的—— 因此,人们可以利用它来解决大量数据的管理工作。 二、ACCESS 开发平台简介 ACCESS 开发平台是基于 Access 开发的,与 Access 相比更加易用,性价比极高的一款软件开发平台,功能强大、与时俱进,与其他 开发平台相比,更加廉价。 易用:Access 与 Excel 都是 Office 家族的成员,在众多操作方法上很相似。由于 Excel 在计算机用户中大范围普及,为这些人士学习、 掌握 Access 的开发提供了很有利的便利条件。而 ACCESS 开发平台则是基于 Access 开发的,其集成的多种常规基础系统功能,使得开发 人员只需在我们的引导下掌握非常简单的业务模块的开发技能, 就可以完成了整个软件系统的开发工作, 大幅降低了软件开发的难度与强度。 随着业务的开展,我们将基于当前的基础平台推出大量的业务平台,届时,基于 ACCESS 开发平台的软件开发将变得更加快捷和容易、成 本更低。 ACCESS 开发平台内置了以下功能: 1. 操作员登录模块:内置了与登录系统相关的一系列功能; 2. 用户管理模块:内置了用户新增、修改、删除、分组等用户管理的相关功能; 3. 权限控制模块:内置了强大而灵活的权限控制体系; 4. 数据图表分析模块:内置了强大的数据汇总统计、图表分析、趋势分析等相关功能; 5. 通用查询数据导出模块:内置了多字段多条件的通用数据查询功能;    6. 数据导出模块:内置了多格式文档数据导出功能; 7. 自定义菜单、功能按钮模块:内置了导航菜单、功能按钮的自定义设置功能; 8. 常用函数:内置了大量的实用函数供开发人员调用,大大简化了开发难度和强度; 9. 局域网联网模块:实现局域网联网,内置了自定义服务器数据库并尽可能地保障了数据安全性; 10. 互联网联网模块:实现互联网联网(企业版新功能,普及版函数较少); 11. 常规设置模块:内置了非常易用的软件开发者的信息展示界面; 12. 系统日志功能:自动记录所有用户的操作,使系统的详细使用情况,有案可查; 13. 自动升级功能:内置了多客户端使用时,一旦服务器版本更新,则其他客户端启动时自动升级的功能; 14. 主程序加密功能:系统的安全性更加有保障; 15. 数据导入功能:内置了导入按钮和导入函数,用来从 Excel 文件中导入数据; 16. 多语言版本支持:目前提供简体中文版,将陆续推出繁体中文版和英文版。 功能强大、 与时俱进: Access 利用其自带的各种控件和 VBA 语言, 可以用来开发功能十分强大的软件; 基于 Access 数据库的 ACCESS 开发平台,可以开发在企业局域网内部使用的,10 个左右客户端的小型管理系统;如果使用基于 SQL Server 数据库的 ACCESS 开发平台 企业版,则可以开发大中型管理系统。 由于我们的平台是基于 Access 开发的,而 Office 对微软是如此的重要,因此,微软每年都会持续投入大量的人力和财力进行 Office 新版本的研发,如此,则意味着 Access 的功能会变得越来越强大,而 Access 越强大,则我们的软件,功能就会越强大,也就是说,我们 的软件升级、软件功能的增强,有微软做为坚实的后盾,因此,不用担心我们的软件会有一天跟不上最新的技术步伐。 免费:ACCpage 2

ESS 开发平台专业版是免费的, ;由于 Access 只是 Office 的一个组件,而鉴于当前 Office 的强大市场占有率,因此,在大 多数场合,并没有额外增加各级用户的成本。 ACCESS 开发平台是基于 Microsoft Access 开发的,是有着深厚大型企业管理背景和微软最有价专家团队开发出来的开发平台,是一款业 务与技术相结合的平台,集成了企事业单位以及个人软件系统的常规功能并且开放业务层的源代码: 一、 Access 开发人员(适合于任何一类人员) ,可以节约大量的时间和成本,快速地开发出非常专业的软件,多方共赢,共同发展; 二、 对于既不懂软件开发又不懂 Access 的人员(适合于任何一类人员) ,通过短期的培训,或者相对培训而言较长时间的自学,就能 快速掌握实用的软件开发技能,由此可以让自身的素质有一个质的飞跃。    1.4.3 ACCESS 开发平台市场分析 (一) 当前企业信息化现状 当今中国,信息化的浪潮蓬勃发展,但是企业在应用计算机技术的过程中存在一个较大的差异性问题。一则经济发达地区和不发达地区 的差异性很大,二则由于企业经济实力的不同,中小企业和国家大企业的应用水平更是天壤之别。 企业信息化的实质就是数据化,而数据化的最佳载体,无疑就是数据库系统,因此一个企业的数据库系统的应用水平,在很大程度上反 应出该企业的信息化应用与管理水平。 (二) 当前企业软件应用选择 虽然数据化的载体,从很大程度上说就是数据库管理系统。但是数据库系统的应用存在一个选择的问题,一般有以下几个选择: 一是自主研发; 二是选择通用的产品; 三是选择定制开发; 四是在通用产品的基础上进行个性化的修改; 五是自主研发与外包相结合的方式; 六是在通用开发平台的基础上进行开发。 此外,可能还存在其他的方式,但是比例非常微小。 下面我们来逐个分析: 1. 自主研发 就自主研发来说,由于本企业的人员,在一定程度上,熟悉本企业的业务流程和实际需求,在项目的开发以及实施配合中,都具有明显 的优势,但是对一般的企业来说,自主研发也绝对是一个挑战,首先,自主研发的周期相对比较长,其次自主研发对企业的人员素质要求很    高,因为软件工程是一个系统性的工程,特别是基础架构的搭建,费时费力,麻雀虽小,五脏俱全,项目的大小与实际的开发难度,并无必 然的联系,高额的人员成本再加上比较长的项目周期,实际成本算下来,代价很是高昂,并且,后续的维护和更新也是大问题,一旦核心的 项目开发人员离职,那么,后期的维护和更新就面临很大的挑战,正是因为如此, ,通用软件开发商才大行其道,占据了很多的市场份额; 2. 选择通用产品 就通用软件来说,厂商众多,产品质量、售后服务水平也参差不齐,就一般来说,比较成熟的大型产品,一般售价适中,大约几万人民 币左右,但是却也超过了一些企业的承受能力,一些偏远地区和经济不发达的地区更是如此,由于中国地区差异性非常之大,因此,通用软 件虽然市场份额很高,却也留下了很多市场空白。就目前中国的整体信息化的水平来说,还是比较低下的,一方面是观念的问题,另一方面, 就是通用软件的相对的高价格问题。虽然说通用软件一般比较成熟,但是在某些特定的场合,通用软件却并不通用,企业不同,流程不同, 需求更是千差万别,这就造成了在很多场合,通用软件并不通用的尴尬; 3. 定制开发 正是因为通用软件并不通用的问题,才造就了相对广阔的定制开发的软件市场。定制开发市场的庞大,并不全是因为通用软件的问题, 在一定程度上由于中国 IT 发展相对滞后,通用软件系统产品不齐全的原因,毕竟通用软件多半属于行业内通用的问题。但是不管怎么说, 定制开发的市场的确不小,但是定制开发,需要一定的财力作为支撑,通常情况下,定制开发需要付出数倍数十倍于通用软件产品的费用, 此外,还要承担更多的额外的项目风险。但是同通用软件一样,大量中小企业和偏远经济欠发达地区,无法承受高额的开发费用,因此,也 留下了相当大的市场空白; 4. 在通用产品的基础进行上个性化的修改 如果说相对广阔的定制开发市场是通用软件并不通用留下的市场机遇的话,其实,通用软件并不通用也造就了另一个市场,那就是在通 用产品的基础进行个性化的修改,有一点毫无疑问,它的费用虽然一般远远低于定制开发,但是却也略高于通用软件,因此,它虽然满足的 客户的需求,但是它的局限性,虽然比纯粹的通用软件要小,但是对大量小企业和偏远经济欠发达地区,也解决不了根本问题,而这类经济 实体和非经济实体的数量,则是远远超过中大型企业,量变必然导致质变,市场规模,不容忽视; 5. 自主研发与外包相结合 还有一种方式,那就是自主研发与外page 3

包相结合的方式,这种方式的风险很大,后期维护升级也是很大的麻烦,开支一般也比直接部署通 用软件要高,因此,此外,还存在责任不清的问题,出了问题,容易互相推委责任; 6. 通用开发平台 随着软件应用技术的发展,一种全新的开发方式最近越来越广泛的使用,那就是基于通用开发平台的开发。这种方式,虽然在某种意义 上说属于定制开发,但是却非常的高效,毕竟不同于普通的全新定制开发,但是,就目前来说,基于通用平台的开发方式,虽然降低了软件 公司的门槛,但是对于用户来说,仍然属于中高端市场,特别这类软件的收费仍然很高,因此也不具备大众化的基础。    1.4.4 ACCESS 开发平台的优势 第一,易用。 Access 的易用是众所周知的, 而基于 Access 开发的 ACCESS 开发平台的易用性更是有了很大的提高——由于 ACCESS 开发平台集成 了 Access 最难开发的基础平台,包括灵活的权限体系、强大的数据分析功能、灵活的查询和数据导出功能、灵活的用户管理、自动升级、 局域网联网等功能,如此一来,则在微软本来就很具有竞争力的易用性方面,更进了一步,更加重要的是,不但解决了传统的大批 Access 开发者,难以解决的专业化的难题,而且,更为他们节省了大量的时间,降低了软件的开发成本。由于 ACCESS 开发平台卓越的易用性, 因此,部署了 ACCESS 开发平台并无后顾之忧: 1. 由于 ACCESS 开发平台易用性是卓越的,因此,各个单位可以派遣专业的或者非专业的人员参加本公司的培训,即可获得详尽的学 习资料,通过短期的培训和学习,即可快速获得实用、专业的软件开发能力,从而为本公司节省了大量的信息化资金; 2. 由于我们开放业务源代码,各单位可以自己随业务的进展自由更新软件以适用自己的实际工作需求,更加及时、灵活,并且,与传统 方式相比,不需要大量的后期维护的资金投入,从而节省了大量的信息化资金; 3. 由于 ACCESS 开发平台的易用性,使企业既不依赖于特定的软件公司,又不依赖于特定的个人,确保开发、更新、维护等无后顾之 忧,降低了企业的经营风险。 第二,功能强大,与时俱进。 很多人都误以为 Access 只能用来做数据存储,其实 Access 不但能用来做数据存储,还具有非常强大的前台开发能力,利用各种控件 和 VBA 语言,能开发出功能十分强大的软件系统。此外,我们都知道微软虽然产品很多,但是 Office 却占了其收入的很大比例,微软内部    每年都对 Office 投入了大量的人力和资金进行研发,因此,可以预计,Access 的功能,会紧跟时代的步伐,确保其满足最新的技术需求, 而我们的平台是基于 Access 开发的,如此,则意味着 Access 越强大,则我们的软件,功能就会越强大,也就是说,我们的软件升级、软 件功能的增强,有微软作为坚实的后盾,因此,不用担心我们的软件会有一天跟不上最新的技术步伐。 第三,专业版免费。 就中国的国情来说,毕竟经济实力强、技术实力强的公司企业只占很少的比例,真正的绝对多数是那些经济实力薄弱、技术力量薄弱的 广大的中小公司企业,如果不廉价,就不可能具有最广阔的市场——量变必然形成质变,与此同时,广大的中小经济薄弱的公司也将因此而 受益: 1.ACCESS 开发平台专业版是免费的; 2.功能更为强大的 ACCESS 开发平台企业版,支持 SQL Server 数据库; 3.由于 Office 的强大占有率,因此,在大多数场合,并没有额外增加用户成本;如果使用 Office 开发版打包,则 ACCESS 开发平台不 需要安装 Access 也可以运行。    1.4.5 可行性总结 由以上分析与介绍可知,使用 ACCESS 开发平台进行软件开发,无论是计算机专业人员还是非计算机专业人员,无论是企业还是个人, 的确是可行的。或许有人对自己的技术没有信心,没关系,一方面可以参加我们的培训,一方面可以从我们当地的认证工程师寻求技术支持 ——如果当地尚未有企业合作伙伴和认证工程师产生,那么,可以从我们公司寻求技术支持,确保用户在软件的使用过程中无后顾之忧。随 着时间的推移,经验的增长,必将为个人带来良好的经济收益和更加优良的发展空间。 第二章 说明与准备工作 2.1 阅读提示 请注意,本教程是严格按照正常使用 Access 开发平台的所必须的知识要素,按正常顺序编写的,请按顺序阅读,否则,会给您的学习 带来困难,所以严格按顺序进行学习是必须的,这样可以节省您学习与掌握它的时间。 2.2 学习使用开发平台的前提条件 第一:基本了解 Access 的数据类型; 第二:基本了解 Access 的表、查询、窗体、报表; 第三:了解 Access 的窗体的常用控件和相关属性; 即使您对以上都不了解,或者根本就不懂 Access ,则可以随意在市面上选购几本通俗的 Access 教程,对着教程做试验,快则page 4

一两 个月,慢则 3-6 个月,您一定能具备学习使用 Access 开发平台的前提条件。 2.3 默认密码与用户名 出于安全的需要,在您使用的 Access 开发平台的过程中,经常会被要求输入密码或帐号,在本系统中,默认密码都是 admin (可以 独立修改) ,默认帐号是:工号: 000001 ,密码: admin 。 2.4 Access 开发平台的版本 当前, Access 开发平台一共两个版本:专业版和企业版,本教程出于普及的目的,是基于专业版制作的。 2.5 Access 开发平台的运行环境 本软件是基于微软的 Offices 套件的 Access 开发的,因此,必须确保您的计算机上安装有 Offices 组件中的 Access 应用程序 , 并且,版本必须是 Offices 2000 或者 Offices 2000 以上,如果是 Offices 2003 ,那么,有的用户启动应用程序时可能会显示如下界 面:    此时请点击取消 (C) 按钮,之后关闭应用程序,并按以下路径定位:开始→程序→Microsoft Office→ Microsoft Offices Access 2003    打开 Access 2003 以后,按以下路径定位:工具→宏→安全性(亦可以在之前单击取消 (C) 按钮之后立即按照这个路径定位) ,如 下图所示:    单击安全性之后,在“安全级 (S) ”选项页,将“中”更改为“低”,如下图示:    单击“确认”按钮,之后在弹出的确认对话框中单击“是 (Y) ”按钮,确认修改,如下图所示:    确认之后,关闭 Access 2003 。 此时,重新启动应用程序,将一切正常。本软件现有功能确保不会对您的系统造成任何伤害。 2.6 建立项目文件夹 正常情况下,您获得的软件包是一个名称为 accdev.rar 的文件,该软件包是采用 WinRAR 软件压缩而成,因此,在使用之前请使用 该软件将本软件解压缩(如果您的计算机上没有安装 WinRAR 软件,请通过正当的途径获得该软件的评估版,或者向比特瑞旺集团软件事 业部申购该软件) ,操作步骤如下: 选中名称为 accdev.rar 的文件,单击右键激活鼠标右键命令快捷菜单,选择解压到当前文件夹 (X) 命令,如下图所示:    执行解压到当前文件夹 (X) 命令之后,会在当前目录生成一个名称为 AccDev 的文件夹,该文件夹即是解压缩完成可以正常使用的全 部软件文件,如下图所示:    用鼠标选中 AccDev 文件夹,双击鼠标左键打开该文件夹,如下图所示:    请注意,该文件夹的所有文件,都是本软件运行所必需的,切不可以随意删除,否则会造成本软件运行异常。下面就简略介绍一下该文件 夹内的文件组织情况: AccDev_be.mdbAccess 开发平台后台数据库文件 AccDev.mdb Access 开发平台前台客户端文件 menuPics 文件夹用于存放 Access 开发平台里用到的图标 Acchelp.umv Access 开发平台系统文件 umv.ICO Data.mdb Access 开发平台系统文件 Access 开发平台系统文件    lsys100.cfg Cursor.cur login.mde    Access 开发平台系统文件 Access 开发平台系统文件 Access 开发平台系统文件    MSCOMCT2.OCX Access 开发平台系统文件 MSCOMCTL.OCX Access 开发平台系统文件 注册控件.bat 用于注册平台里用到的控件,在遇到控件未注册的情况下可以修复部分 Access 开发平台的运行故障 。 Accdev 文件夹内除了 AccDev_be.mdb 和 AccDev.mdb 两个文件会在您开发过程中频繁使用, 其他的 ACCESS 开发平台系统文 件,都将不会在开发过程中有所涉及或者很少涉及,但是却是系统运行所必需的,请保证它们的完整性和目录一致性。 AccDev 这个文件夹的名字,是系统默认的,如果您开始基于 Access 开发平台开发您的系统,那么,可以将该文件夹重命名为一个有 意义的名字。在这里,我将以一个简略的报销管理系统的开发过程来向各位介绍 Access 开发平台的使用方法,因此,在这里我将这个文件 夹命名为 BXMIS (BaoXiao Management Information System ) ,其操作步骤如下: 单击向上按钮,退出该文件夹回到上一级,之后选中 AccDev 文件夹,单击鼠标右键激活鼠标右键快捷菜单,选择重命名 (M) 右键菜 单,如下图所示:    或者选中 AccDev 文件夹后按下键盘上的 F2 键(重命名命令的系统快捷键) ,此时,该文件夹的名称将会高亮显示,此刻再次单击右 键选择删除命令,或者按键盘上的 Delete 键,删除该文件夹的名称,之后重新输入该文件夹的名称: BXMIS 。 之后再次在该目录空白处单击鼠标右键,激活鼠标右键菜单,选择新建 (W) 菜单下page 5

的文件夹 (F) 命令,如下图所示:    之后将新建的文件夹命名为:报销管理系统,之后将 BXMIS 文件夹移动到报销管理系统内部,完成之后如下图所示:    在此说明一下,在本例中,报销管理系统目录将存放整个项目的相关文件,比如需求设计说明书、功能设计说明书、表设计说明书、程 序文件等,而 BXMIS 目录则只存放原本的那些系统文件和数据库相关文件。 第三章 表设计 3.1 建表说明 就从基于 Access 开发平台开发的角度来说,第一步工作就是要在后台数据库中建表,但是就从完整的系统开发角度来说,在正式建表之 前,还有太多工作要做,比如,考察项目是否可行,需求调研,框架设计,功能设计、表设计等,由于我们在这里,是介绍 Access 开发平 台的使用,并非是对整个软件开发流程的介绍,因此,我们假使此项目可行,并且,您已经完成了需求调研、框架设计和功能设计。出于方 便读者的目的,这里附上相关的文件,下载地址: http://www.umvps.com/umv/bxDoc.rar (即下图中 3 个 Word 文件),如下图所示:    在这里,我们将从表的设计开始介绍。 关于表的设计, 有专业的设计工具, 但是我们推荐比较廉价的做法是这样的: 先在电子表格中 (比如 Microsoft Excel 、 金山的 WPS ) 规划主要的表组成(不含参数表) 、各个主表的字段分布和大致的数据类型,之后在字处理软件(比如写字板、 Microsoft Word 、金山的 WPS )中书写详细的表设计说明书。在此请注意以下几点:最好是在确认表设计说明书之后再开始在数据库中建表,否则如果事后发现设 计失误,将会造成比较大的时间浪费,在这里,有必要特别强调一下,表设计的好坏,直接关系到项目的质量和成败——关于表设计的相关 主题,一方面需要经验的积累,一方面需要熟练掌握表设计的相关理论和原则,在这方面,读者可以参阅相关资料。 当然,对初学者来说,无法精确掌控表设计,那么,您就可以事先按照您自己的思路来走,慢慢在实践中积累经验。在此我提醒大家一 点,请重视理论的作用,无论是设计还是开发。虽然实际的开发经验是重要的,但是如果你不熟悉理论的话,你可能会重犯很多前人的错误, 并且,在理论结合实际的开发活动中,无论是您的创造能力、开发效率、还是发展前途,都要比不懂理论的人要强的多。 3.2 建表 现在我们已经完成了准备工作,可以开始正式在 Access 开发平台后台数据库文件中建表了。之前提到 AccDev_be.mdb 文件是 Access 开发平台后台数据库文件,恐怕有些人会有疑惑的,是的,我们现在就来还原这个数据文件本来的面目。 按下列路径定位:开始,控制面板,文件夹选项,查看选项卡,请确认在高级设置选项区内“隐藏已知文件类型的扩展名”的选项并未被 选中,如下图所示:    双击 AccDev_be.mdb ,如下图所示:    本系统默认的密码是 admin ,当然,是可以修改的,确认之后,就可以按照数据库表设计文档开始新建表了,新建表的时候有几点请 注意: 第一:严格保证实际的表结构和文档的一致性,如果您在新建表中或者之后更改了表设计,那么,请保证文档和实际的结构的一致性, 因为是在实际的开发过程之中你很可能频繁地查阅该文挡; 第二:不要遗漏任何扩展属性,比如,是否为空,主键等,同样,也要保证实际的扩展属性和文档的一致性。 为了便于查看和管理,可以选中新建的表,之后单击右键激活右键快捷命令菜单,执行属性 (P) 命令,如下图所示:    之后在表属性对话框的说明文本框中输入该表的中文名称,如下图所示:    本示例中所有的表都新建并添加中文说明之后,如下图所示:    请注意一点, 为了能很好的区分我们的系统表和您建的用户表,以方便后期的工作,请将您建的表以 tbl 或者以 tbl_ 作为表名的前缀。 3.3 更改后台数据库的保护密码 如果你不想采用默认的后台数据库保护密码,那么,你可以更换密码,需要说明的是,在 Access 中,不能直接更换密码,必须先撤消 数据库密码,之后再重新设置数据库密码。如果你在正常登录系统的情况下企图撤消数据库密码,那么,将会出现如下错误提示:    正确确的更改后台数据库保护密码的步骤如下: 第一:按以下路径定位:开始→程序→Microsoft Office→Microsoft Offices Access 2003 ,如下图所示:    第二: 打开 Access 2003 以后,按以下路径定位: 文件 (F) ,打开 (O) ,如下图所示:page 6

    在打开对话框中, 浏览定位到要更改数据库保护密码的后台数据库文件, 之后在单击打开按钮后面的小三角, 选择以“独占方式打开 (V) ” 命令,如下图所示:    之后在要求输入密码对话框中输入现有的密码,打开后台数据库文件之后,按以下路径定位:工具 (T) ,安全 (T) ,撤消数据库密码 (D) ,如下图所示:    执行撤消数据库密码 (D) 命令之后,在弹出的撤消数据库密码对话框中输入原密码(原密码为: admin),如下图所示:    单击确定按钮确认撤消操作,之后再按如下路径定位:工具 (T) →安全 (T)→设置数据库密码 (D) ,如下图所示(请注意,刚才的撤 消数据库密码 (D) 已经变成了设置数据库密码 (D) ,可以通过这个命令菜单查看当前的数据库是否存在数据库密码) :    执行设置数据库密码 (D) 菜单命令之后,如下图所示:    如图所示,在设置数据库密码对话框中,在密码 (P) 下方的文本框中输入新密码,之后在验证 (V) 下方的文本框中再次输入一致的新 密码(如果两次输入不一致,则无法设置成功) ,之后单击确定按钮保存设置。 3.4 链接后台数据库 为了顺利地在前台客户端文件(即 AccDev.mdb)中进行设计工作, 您需要将后台数据库文件(即 AccDev_be.mdb)中的表链接到前台客 户端文件(即 AccDev.mdb)。操作步骤如下: 按住键盘的 shift 键(注意,一定要等该程序文件完全打开之后再松开 shift 键,否则会出现登录对话框,如果出现了登录对话框,则 意味着你按 shift 键失败, 需要关闭程序重新打开, 有少量初学者在这个问题上出了纰漏) 双击打开 BXMIS 目录的 AccDev.mdb 文件, , 也就是 Access 开发平台前台客户端文件,主要的设计工作将在这里完成。第一次打开之后的表标签如下图所示:    按以下路径定位:文件(F)→获取外部数据(G)→链接表(L) ,如下图所示:    执行链接表 (L) 菜单命令之后,将会打开链接对话框,浏览定位到要链接的数据文件,单击链接 (K) 按钮,如下图所示    执行链接 (K) 按钮命令之后,如下图所示:    因为要打开的链接的数据库文件有密码保护, 所以, 这里要求输入密码 (如果要链接的数据库文件没有密码保护, 则会直接进入下一步) , 输入正确的密码(初始密码默认为: admin)之后,单击确认按钮,如下图所示:    选中链接表对话框表选项卡中的所有的前缀为 tbl 的表(实际上是选中所有的需要链接的表,可以多选,一次可以链接多个) ,之后单 击确定按钮,如下图所示:    系统将开始执行链接命令,完成链接之后,如下图所示:    如新建表中所提示的方法,给所有的表都加上中文说明,以方便查看和管理,完成之后如下图所示(为了快捷,中文名称可以从报销管 理系统表设计说明书 .doc 文件中复制过来,这也是初步体现了该表字段设计文档的用处) :    3.5 检查控件引用完整性和引用顺序 在正式使用开发平台之前,请检查控件的引用完整性和引用顺序,否则,可能会有意想不到的错误出现。 按住 shift 键(注意,一定要等该程序文件完全打开之后再松开 shift 键,否则会出现登录对话框,如果出现了登录对话框,则意味着你按 shift 键失败, 关闭程序重新来, 有少量初学者在这个问题上出了纰漏) 双击打开 Access 开发平台前台客户端文件, , 也就是 AccDev.mdb 文件,之后单击左侧的窗体窗格,注意到此时窗体的窗格的右侧没有任何窗体,请按以下路径定位:工具 (T) →选项 (O) ,如下图所示:    单击选项 (O) 菜单命令,选择视图选项卡,如下图所示:    选中显示选项区的系统对象 (Y) 复选框,之后单击确定按钮,此时,被隐藏的系统对象,将会全部显示出来,如下图所示:    选中以上右侧窗格中任意一个窗体(请注意,如果您不任意选择一个窗体就按下面的路径定位的话,代码 (C) 的菜单命令将会是灰色不 可选的状态) ,之后按以下路径定位:视图 (V) →代码 (C) ,如下图所示:    执行代码 (C) 命令之后,如下图所示:    如上图所示,按以下路径定位:工具 (T) →引用 (R) ,如下图所示:    执行引用 (R) 菜单命令之后,如下图所示:page 7

    请注意上图的这个顺序是明显不正确的,选中“可使用的引用”列表列表框的 OLE Automation ,之后按优先级之上的 按钮调整引用的 排列顺序,正确的排列顺序如下:    请注意这里的引用完整性和引用顺序,确保如上图所示,OLE 一定要在第三位,如果引用顺序不一致,可能会有意想不到的异常。比如 下图错误:    本演示是在 Access 2003 下截图,如果您的 Access 版本并非 2003 ,则各个引用控件的版本号并不完全和这里一致,但是并不影响本 系统的正常使用。 确保引用正常之后,单击确认按钮关闭引用对话框,之后再单击右上角的 按钮关闭 Microsoft Visual Basic 界面,之后再关闭应用程 序。 请注意,不要随意修改本系统定义的系统窗体,否则,后果可能很严重,除非你可以确认并理解您的修改。 3.6 登录 Access 开发平台前台客户端 双击 AccDev.mdb (不要按住 shift ) ,如下图所示:    输入本系统默认的工号: 000001 ,密码: admin ,之后单击登录按钮,即可登录系统。 如果出现以下错误:    这是因为 Access 开发平台前台客户端文件设置里,并没有进行同步造成的,因为您必须指定后台数据库文件的路径,才可以正常的使 用本系统。下面,我们就将进行这个同步操作,单击当前的错误提示框的确认按钮,之后单击登录按钮旁边的小三角,之后单击服务器设置 按钮,如下图所示:    执行服务器设置之后,如下图所示:    输入系统默认的服务器管理密码:admin ,之后单击确定按钮,将会弹出服务器设置对话框,如下图所示:    正常情况下,前两项保持默认值即可,第三项,服务器地址为 (local) 表示后台数据库文件与前台客户端文件处于同一目录。如果您的 在同一目录,则不需要修改,如果在不同目录,则在这里输入路径名称,比如在分区下的 Date 目录,就输入 C:\Date ,请注意,前台客 户端文件和后台数据库文件并没有强制要求在同一目录,它们可以在不同目录。在本例中,保持 (local) 默认值,因为,两个文件在同一目 录。    数据库名称中输入实际的数据库名称,在本例中,输入 AccDev_be.mdb 即可。之后在密码框中输入密码 admin (注:这里的密码是 后台数据库密码,如果刚才改了后台数据库密码,这里要输入修改后的密码)(一定要输入密码,否则保存不会成功) ,之后单击保存按钮,保 存当前设置,如下图所示:    单击确定按钮,如果你输入的无误,则如下图所示:    如果有错误提示,请检查您的输入是否存在问题。单击确定按钮,即可返回登录界面,单击登录按钮,即可登录系统。 第一次登录系统 的界面如下图所示:    3.7 导航菜单设置 所谓导航菜单,即是正常登录系统之后,左边的导航窗格,默认是有 3 个分类,菜单分类 1,菜单分类 2,菜单分类 3,其中又包括 8 个菜单,从菜单一到菜单八,再加上数据分析、系统管理、退出系统,根据本示例系统的规划,在本示例程序中需要用到基础资料、报销管 理、系统管理和退出系统一共 4 个菜单,而系统管理、退出系统这二个导航菜单系统已经定义,因此,只需要将默认的菜单分类 1 改为报销 管理,菜单一更名为报销管理, ,菜单二更名为基础资料,并将菜单三至菜单八隐藏即可。操作步骤如下: 双击 AccDev.mdb 文件,之后在系统登录界面的工号文本框中输入默认的工号:000001,在密码文本框中输入默认的密码: admin (如果修改过密码,则输入相对应的密码) 。登录系统之后,按以下路径定位: 系统菜单,导航菜单设置,如下图所示:    初次单击导航菜单设置之后,如下图所示:    单击工具栏的修改按钮(请注意,如果不单击修改按钮,将无法执行以下的修改) ,由于系统比较简单,这里我们把是否分类前的勾去掉, 之后取消导航菜单名称中菜单三至数据分析的相对应的启用按钮的选定,如下图所示:    之后将菜单分类(1)改为报销管理,菜单一,菜单二分别清除,分别重新输入报销管理、基础资料,完成之后,如下图所示:    确认输入无误之后,单击保存按钮,然后单击关闭按钮。则如下图所示:    由此图可以得知,我们所要达到的目的,已经完成。 第四章 基础资料窗体的设page 8

计 4.1 基础数据界面的制作 导航菜单设置完成之后,就该制作数据显示页面了。 关于数据窗体(界面)的制作,含子窗体的窗体(界面)制作和不含子窗体的数据窗体制作,并不完全一致,从技术角度来说,技术含 量也不一样,下面,我们就先以员工姓名的基础资料为例,来介绍不含子窗体的数据窗体的制作。在这里,我们可以将之称之为简单窗体, 简单窗体制作的操作步骤如下: 如果尚未退出应用程序,则退出(关闭)应用程序。然后按住 shift (注意,一定要等该程序文件完全打开之后再松开 shift 键,否 则会出现登录对话框,如果出现了登录对话框,则意味着你按 shift 键失败,关闭程序重新来,有少量初学者在这个问题上出了纰漏) ,双 击打开 AccDev.mdb ,之后激活对象窗格的窗体按钮,如下图所示:    由于本实例非常简单,如此,也就完成了设计工作,单击右上角偏下的关闭按钮(注意,右上角有两个关闭按钮,在此处点偏下区域的 那一个) ,关闭当前设计对话框(请注意,没有必要将此设计保存为查询,在设计过程中,切勿执行任何保存操作) ,则可能会弹出如下对话 框(如果是涉及到对已有数据库源的修改的话,则会出现,如果是第一次设置数据源,则不会出现) ,如下图所示:    选择并双击 usysfrmLogin 窗体,则弹出系统登录界面,如下图所示:    正确输入工号和密码,点击登录按钮,则会弹出正常的登录界面,如下图所示:    此刻注意到任务栏上有两个关于 Access 的项目,一个是控制面板,一个是 AccDev :数据库,当前显示的即是控制面板,单击鼠标 选择 AccDev 切换到数据库窗口界面,如下图所示:    切换回 AccDev,将左侧的滚动条向上移动,之后选择在设计视图中创建窗体,之后在单击设计按钮,如下图所示:    选择在设计视图中创建窗体,并单击设计按钮之后,效果如下图所示:    注意到窗体的左侧有一个浮动的工具箱,我们一般习惯将其固定到左侧。将鼠标移动到工具箱上方标题栏的空白区域(非按钮区域,即 是空白区域) ,之后按住鼠标不松向左边拖动,此时,该工具箱会自动嵌入到左侧,如下图所示:    如果您不慎将该工具箱关闭,则可在菜单栏按以下路径定位 : 视图 (V)→ 工具箱 (X) ,如果工具箱被关闭,则工具箱 (X) 是浮起的 状态,如果工具箱是当前显示的,则该工具箱 (X) 按钮是被凹下的状态,如下图所示(当前工具箱是显示状态) :    注意到上图的菜单底部有一个箭头的按钮,这是因为,当前的下拉菜单隐藏了默认不常用的菜单命令,以下按如下路径定位,视图 (V), 箭头按钮,单击箭头按钮,完整的视图菜单如下所示:    请注意以上的菜单,当前状态,工具箱、标尺、网格三个命令菜单都是凹下去的,表明当前这三个命令所代表的对象,当前都是显示的 状态,工具箱我们已经知道了。那标尺是什么呢?请注意当前是设计界面,上侧和左侧各有一个标有数据的数据条,这两个数据条,就是标 尺,标尺是在设计的时候定位控件用的。而标尺包围的内部区域,颜色较浅的灰色区域,即是正式的设计区域,之上的正方形窗格,即是网 格显示的效果。各位可以将这两个选项取消,查看一下显示效果,这两个命令按钮,根据个人习惯而决定是否采用,通常都是使用的。 注意到上标尺和左标尺交叉的地方有一个小方格,在此小方格上单击右键,激活的命令菜单如下:    请注意,这里的属性,就是大名鼎鼎的窗体属性,窗体属性,是在窗体设计中频繁使用的设计对话框,双击该小方块也可以直接打开窗 体属性对话框,请注意,在标尺的数字区域任何一处双击也可以窗体属性对话框,同时,标尺区域数字区域内部的右键快捷菜单的属性,即 是窗体属性。    双击标尺的数字区域,或者上标尺与左标尺交叉的小方块,打开窗体属性对话框(注意窗体属性的对话框的标题栏,有窗体二字,因此在此 设计界面,可以激活的属性对话框种类很多,注意不要认错了地方) ,选择数据选项卡,如下图所示:    单击记录源的输入区域,则其后会出现一个 按钮,单击该按钮,之后如下图所示:    选择表选项卡,之后选中 tblCodeyg ,之后单击添加 (A) 按钮,如下图所示    注意,在这里,按住 Ctrl 键再点选表,可以将同时选中多个表,在本例中,我page 9

们只需要使用一个表,因此,在将要使用的表添加到设 计器中后,选择关闭 (C) 按钮,关闭当前显示表对话框,需要注意的是,该显示表对话框,可以在该界面中设计中,重新恢复显示,只需 要单击工具栏上的 按钮即可。关闭显示表之后的对话框如下图所示:    该设计窗格分为上下两部分,上半部分显示选择的表和查询 ( 也可以在这里建临时关系——如果你不了解什么是关系,可以查阅相关内 容 ) ,下半部分,则是需要使用到的字段,该界面是 SQL 语句查询语句生成器的界面,即根据您的设计情况,自动生成 SQL 查询语句, 如果您可以具备 SQL 查询语句编写能力,直接编写 SQL 查询语句,不需要进入此界面。 注意到选择的表显示框内,除了显示正常的表的字段之外,还多了一个 * 号,双击该 * 号,表示选择所有的字段,双击某一个字段的 名称,表示选择该字段。在本例子中,我们双击该 * 号,则如下图所示:    我们发现,下半格的显示区域内,有些宽了,可以将鼠标移动到两个显示窗格之间,将会出现双向箭头,这时可以采用拖拽的方式来扩 大的当前的显示区域,如果在此处双击,则其显示区域大小正好合适。调整大小后如下图所示:    由于本实例非常简单,如此,也就完成了设计工作,单击右上角偏下的关闭按钮(注意,右上角有两个关闭按钮,在此处点偏下区域的 那一个) ,关闭当前设计对话框(请注意,没有必要将此设计保存为查询,在设计过程中,切勿执行任何保存操作) ,则可能会弹出如下对话 框(如果是涉及到对已有数据库源的修改的话,则会出现,如果是第一次设置数据源,则不会出现) ,如下图所示:    单击是 (Y) 按钮,则会回来窗体属性对话框,注意到了记录文本框中多了一行 SQL 代码,事实上,刚才执行的操作,也就是为了生成 这行代码,你也可以直接输入该行代码而不需要进入刚才的设计界面。但是对学初学者来说,推荐使用 SQL 语句生成器。如果你执行的没    有错误,刚才生成的正确代码如下: Select tblCodeyg.* FROM tblCodeyg; 需要提醒大家的是, Access 数据中使用的 SQL 代码,与 SQL Server 的 T-SQL 代码,并不完全一致,很多情况下,不能直接通 用。习惯了使用 T-SQL 代码的读者,请注意这一点。 关闭窗体属性对话框,则如下图所示:    注意到其中有一个浮动的字段列表的显示框,即是刚才选择的字段的列表,如果不慎关闭了该列表,可以单击工具条上的显示字段按钮 恢复显示。按住键盘上 Ctrl 键,分别点选两个字段,之后把它们拖放到设计界面(也可以分别双击,它自然会在设计区域显示) ,如下图所 示:    关闭字段列表,之后适当修改标签(如果您未曾执行前面的登录操作,则这里显示是英文标签,此刻,还要手工更改标签,这也是做设 计之前,为什么要登录的原因,这也是本系统的特性,此外,有一点也要特别注意,如果您未曾登录系统,即使是后台数据库有数据,这里 也不会显示,这种设计,也是为了保护您的安全,因此,在设计之前需要登录系统,即按照本教程的步骤操作) ,在这里,我们将标签后面 的冒号给去掉(根据情况或者个人的爱好而定) ,操作步骤如下:双击标签名称,之后在弹出的标签对话框中,选择格式选项卡,之后在标 题文本框中,清除后面的冒号,完成之后如下图所示(也可以选中标签后直接按 F2 键激活标签的标题的修改,直接修改标签,或者以连续 两次间隔时间较长的单击激活标签的标题的修改,亦可直接修改标签) :    按以下路径定位:视图 (V)→ 窗体视图 (F), 如下图所示:    单击窗体视图的菜单命令,即将界面从设计界面切换到了显示界面,如下图所示:    注意到左边的一个带黑小三角的竖条叫做记录选定器,下面一条横线叫做分隔线,可以在窗体属性里决定是否显示,默认是显示的。如 果控件特别多而超出了屏幕的显示,则右边和下边还可能出现滚动条,分别叫做垂直滚动条和水平滚动条。事实上,通过拖拽下来的两个字 段的显示,每一个都是分别两个控件组成的,左边是标签控件,用以显示字段名称,右边是提供输入的控件,叫做文本框。 在这里,这种显示效果不是我们想要的,按以下路径定位:视图 (V)→设计视图(D) ,单击设计视图返回设计界面之后,双击标尺栏的 空白区域或者上标尺与左标尺交叉的小方块打开窗体属性,之后选择格式选项卡,如下图所示:page 10

    注意到默认视图是单个窗体,单击该组合框选择数据表选项,将默认视图更改为数据表,如下图所示:    关闭窗体属性对话框,之后再单击工具栏上的保存按钮(或者按以下路径定位亦可:文件(F)→保存(S)) ,则会弹出另存为对话框,如下 图所示:    在窗体名称中,输入 frmyg_child ,之后点确定按钮保存命令,之后单击右上角靠下的关闭按钮,关闭当前窗体。之后在窗体列表中 双击 frmyg_child 打开该窗体,则如下图所示:    因为在这里默认视图已经修改为数据表,故如此显示,如果是默认的窗体视图的话,则是以前切换的显示界面,在这里,初学者可以对 比窗体视图和数据表视图的差别。 另外提一下窗体的命名约定:为了便于标记,可以将所有用户定义的窗体的以都加上 frm_ 或者 frm 的前缀,同时,赋予 _child 或 以 child 的后缀,中间这一段,则可以自由选定,以熟悉识别为前提。但是有一点需要知道,那就是在设置导航按钮的时候,由于窗体太多,    当你选择子窗体的时候,只显示带 child 后缀的窗体。 关闭该窗体。如表一样,可以在选中该窗体,之后在右键菜单中选择属性,如下图所示:    在属性中,可以和表一样,给窗体添加说明。在这里,我们给刚制作的窗体添加这样的说明:员工姓名 - 主数据窗体。这样,主数据界 面窗体就制作完成了,由于这是一个基础资料的主数据界面,所以,非常简单。 4.2 导航按钮设置 我们刚才完成了主界面的设计,下面需要做的就是将其显示出来,也就是可以在开发平台查看刚才的设计成果,按上一节所提,切换到 控制面板,之后按以下路径定位:系统管理→导航按钮设置,如下图所示:    执行导航按钮设置之后,如下图所示:    这里就是设置导航按钮的界面,但是默认是显示系统管理窗格的导航按钮,在这里,我们可以知道我们上一节制作的员工姓名的主数据窗 体,应该位于基础资料导航窗格内部,因此,在上面的界面,直接点击左边的基础资料窗格,如下图所示:    如上图所示,由于我们之前没有在此窗格内部设置任何的导航按钮,因此,选中序号为 1 的记录(如果设置了,则往后顺延,比如,已 经在此窗格设置了 3 个导航按钮,则选择序号为 4 的记录) ,之后点工具栏上的修改按钮,如下图所示:    在这里,需要说明的是,对象标题即是点击导航按钮进入正式的窗体界面之后在窗体的工具栏上部显示的名称,在本例中,我们输入:员 工姓名;而按钮名称,则是单击导航窗格之后看到按钮的名称,在本例中,我们也输入员工姓名;对象类型,就是你单击导航按钮所要打开 的对象的类型,在本例中,我们选择子窗体;指向对象,则是单击导航按钮所要打开的具体的对象,本例中,我们选择: frmyg_child ; 一句话帮助,则是在窗口下部对此窗体所作的说明,可以根据需要决定是否选择,本例输入以下内容:员工姓名的参数列表控制。之后在对 象属性中,选择启用和打开两个复选框。更改图片按钮则是更改你需要显示的图片,完成之后,如下图所示:    检查输入无误之后,单击关闭按钮,保存修改。之后点关闭按钮,退出导航按钮设置,之后再单击参数控制导航窗格,发现右侧并没有按 钮显示出来,如下图所示:    这是因为当前只添加了导航按钮,还没有进行权限设置的原因。按以下的路径进行定位:系统管理→部门及组权限,如下图所示:    双击管理员,之后会出现管理组的下级目录,选中管理员组,之后再单击修改按钮,如下图所示:    如上图所示,选择常规权限单选按钮,之后点击确定按钮,如下图所示:    如上图所示,在菜单名称中选择基础资料(这里,这里的菜单名称和导航窗格菜单是一一对应的) ,则如下图所示:    如上图所示,选择员工姓名,则如下图所示:    注意到权限设置选项区有了可选项,但是就仅仅一个打开,这就因为我们当初定义导航菜单的时候也只定义了启用和打开两个权限选项, 启用是指将对象,也就是启用的那个按钮对应的窗体,添加到如上图所示的功能按钮列表中来,如果不选中启用复选框,则这里在菜单名称 中选择参数控制之后,功能按钮列表中根本就不会显示员工姓名的选项,也就无法进行该窗体的权限设置,而打开则是指对于特定的权限组 (page 11

也就是用户组,比如管理员即是一个权限组,也是一个用户组,也就是几个特定成员或者用户的集合) ,可以将窗体的功能按钮显示出来, 从而用户可以使用这一部分功能。在本例中,由于我们需要赋予管理员组打开的权限,因此,选择打开复选框,之后单击保存按钮保存权限 设置,单击保存按钮之后,则会弹出如下对话框:    单击确定按钮,则会弹出新权限保存成功的提示对话框,再次单击确认按钮,之后关闭当前部门以用户组权限设置对话框。之后退出部 及用户组权限设置对话框,单击参数控制导航窗格,注意到右边已经出现了员工姓名按钮,如下图所示:    单击如上图所示的员工姓名按钮,则如下图所示:    如上图所示,员工姓名数据显示窗体的导航按钮设置的工作已经完成。 4.3 新增窗体的制作 由于我们需要进行精确的权限控制,因此,我们需要制作单独的新增窗体,而需要禁止掉数据显示窗体的数据新增功能,这样,才有利 于用户权限的管理和保证数据的完整性。 禁止数据显示窗体的数据新增功能操作步骤如下: 切换到数据库窗口,之后打开 frmyg_child 窗体并切换到设计视图,打开窗体属性对话框,选择数据选项卡,之后将记录集类型由默 认的动态集修改为快照,如下图所示:    关闭窗体属性,保存修改。此时,起先制作的数据显示窗体的数据新增、修改以及删除功能都已经被禁止掉。这些功能,我们将通过单 独的工具栏按钮来实现,以便更好地实现权限的控制。 新增窗体制作的操作步骤如下: 关掉当前的窗体,回到数据库窗口,双击在设计视图中创建窗体,之后关闭工具箱的向导,即让工具箱的 按钮处于浮起的状态,默认 是凹下的,即默认是激活的状态,我们这里不需要使用向导,把它取消即可(即处于浮起的状态) 。之后点击工具箱的(文本框)控件,之 后再设计界面适当的位置,单击鼠标左键,即会新建一个文本框,如下图所示:    新建的文本框会默认携带一个标签控件, 即左边的显示为 Text0: 的文字控件, 单击选中该控件, 之后单击鼠标右键激活右键快捷菜单, 如下图所示:    如上图所示,选择属性 (P) ,则会弹出标签属性对话框,在标签属性对话框,选择格式选项卡,之后将标题属性由 Text4: 修改为员 工姓名,之后关闭标签属性对话框,保存修改。之后再次选择该标签单击鼠标右键,选择大小 (S) 级联菜单的正好容纳 (F) 命令。之后选 择文本框,同样单击鼠标右键,选择属性 (P) 命令,如下图所示:    在弹出的文本框对话框中,选择其他选项卡,修改名称属性为:ygxm ,这个名称,是在后台代码中唯一标识该文本框的名称。    之后按以下路径定位: 视图 (V) →窗体页面/页脚 (A) , 单击窗体页面 / 页脚 (A) 菜单命令之后 (注意切勿弄成了页面页眉 / 页脚) , 如下图所示:    将鼠标移动到窗体页脚底部,此时鼠标将会显示为上下双向箭头,按住鼠标向上拖动,将窗体页脚完全隐藏,如下图所示:    之后切换到数据库窗口,选中 ActiveX 窗体(此窗体将在 2007 年 3 月份以后的版本中新增,如果你的版本中没有此窗体,可以下 载新版本,导入此窗体即可,下载地址: http://www.accessoft.com/down/ActiveX.rar) ,之后在设计视图打开该窗体,通过鼠标拖放的 方式选中一区内的所有控件(也可以按住键盘 Ctrl 键,一个一个地点选) ,如下图所示:    同时按住键盘上的 Ctrl 键和 C 键将选中的控件复制到剪贴板,或者按以下路径定位:编辑 (E) →复制 (C) ,亦可将选中的控件复制 到剪贴板,之后切换到刚才的正在编辑的窗体 1 ,单击窗体页面内的空白区域,之后执行编辑 (R) 下拉菜单的粘贴 (V) 命令,则可将刚 才复制到剪贴板的内容粘贴到当前正在编辑窗体的窗体页眉中,如下图所示:    关闭 ActiveX 窗体,之后使用鼠标拖拽各个控件并利用格式下拉菜单内的各种命令(主要是对齐和大小级联菜单命令)的方式,调整    一下窗体内控件的分布情况,调整完毕之后,如下图所示:    此时,单击右上角偏下的还原按钮    ,注意,是该窗体的还原按钮,而非整个 Access 应用程序的还原按钮,即偏下的那一个,即    按钮,执行过还原命令按钮之后,如下图所示:    请注意一点,现在才是正在设计中的窗体 1 面向终端用户正常显示的真实大小page 12

,刚才那个是最大化显示,因为该窗体是新增窗体,必然 会单独弹出来,因此,独立显示是存在的,出于美观的考虑,我们需要调整一下该窗口的的大小,同样,通过将鼠标移动到窗体边缘拖拽的 方式调整窗体的大小,完成之后如下图所示:    调整完成之后,打开该窗体属性,选择格式选项卡(通过拖拽的方式可以拉长该属性窗口) ,分别执行以下属性修改: 标题:无默认值,输入以下字符:员工姓名新增; 滚动条:默认值为两者都有,修改为:两者均无; 记录选定器:默认为是,修改为:否; 导航按钮:默认为是,修改为:否; 分隔线:默认是为,修改为:否; 自动调整:默认为是,修改为:否; 自动居中:默认是否,修改为:是; 边框样式:默认为可调边框,修改为:对话框边框; 最大化最小化按钮:默认为两者都有,修改为:无。 之后再选择其他选项卡,分别执行以下属性修改: 弹出方式:默认为否,修改为:是; 模式:默认为否,修改为:是。 修改完毕之后,关闭窗体属性对话框保存修改。 有一个问题请读者注意一下,从开始到现在做了很多修改,却从来没有保存,这样的话,如果应用程序发生故障,那么,所有的工作都 将丢失,因此,应该尽早保存,当然,这步操作可以尽早进行,并不是非要放在这一步进行。单击工具栏上的保存按钮,在弹出的另存为对 话框中输入窗体名称: frmyg_child_Add ,之后单击确定按钮确认。这里需要说明一下新增窗体的命名规则,这是强制的,如果您违反 了这个命名规则,那么您的新增功能一定有问题或者无法实现。新增窗体的命名规则:基本数据窗体的名称 + _Add 。由于此新增窗体是 员工姓名数据窗体的新增窗体,而员工姓名数据窗体的命名是 frmyg_child ,因此,该新增的窗体的命名则必须是 frmyg_child_Add 。 也就是说,当你的基础数据窗体的命名确定以后,新增窗体、修改窗体的命名则已经给定死了,绝对不能修改。而修改窗体的命名规则只是    将 _Add 替换成 _Edit 而已。 保存窗体之后,按以下路径定位:视图 (V) ,代码 (C) ,执行代码 (C) 菜单命令之后,如下图所示:    这里,即进入了后台代码编写的界面,注意到当前的代码窗口是正是 frmyg_child_Add ,在该窗口中输入以下代码: Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object) Select Case Button Case "保存" cmd_Save Case "关闭" DoCmd.Close End Select End Sub Private Sub cmd_Save() Dim rst As DAO.Recordset If IsNull(Me.ygxm) Then MsgBox "请输入员工姓名!", vbCritical, "提示:" Me.ygxm.SetFocus Exit Sub End If Me.Refresh If Acchelp_StrDataIsExist("tblCodeyg", "ygxm", Me.ygxm) = True Then MsgBox "你输入的数据已经存在,请重新输入", vbCritical, "警告" Me.ygxm.SetFocus Exit Sub End If If MsgBox("您确认要保存吗?", vbOKCancel + vbInformation, "提示") = vbOK Then Set rst = CurrentDb.OpenRecordset("tblCodeyg", dbOpenDynaset) rst.AddNew rst("ygId") = acchelp_autoid("Y",2, "tblCodeyg", "ygId") rst("ygxm") = Me.ygxm rst.Update rst.Close Set rst = Nothing '刷新数据    If IsLoaded("usysfrmMain") Then DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child" DoCmd.Echo True End If MsgBox "保存成功!", vbInformation, "提示" Me.ygxm = Null End If End Sub 以上代码,如果您能看懂最好,如果你不能看懂,则将蓝色字符替换为你的场景对应的角色即可。所有的蓝色字符皆为个性化参数。这 些名称要么是窗体名称、表名称、字段名称、控件名称或者提示文本,之前我们都已经见过了,因此,在这里就不多说了。如果初学者想了 解这些代码的真实含义,可以去查阅 VBA 语言的相关教程。 确认修改无误后保存输入,并关闭代码页面。有一点请注意,虽然员工姓名参数表里有两个字段,但是我这里只添加了一个文本框对应 于员工姓名字段,而并未曾添加另一个字段,这是因为另一个字段是系统编号的字段,其数据由数据添加时由代码自动生成的,不需要用户 来干预,故可以不为其设置输入数据的文本框。这一点请注意。当然,你要想添加也不是不可以。不过,那种做法的处理比这种做法的处理 要复杂的多,在这个场合,没有那个必要。在这个场合,负责自动生成序号是上面所书写代码中这样一行: rst("ygId") = acchelp_autoid("Y",2, "tblCodeyg", "ygId") 稍后当正式的数据输入显示之后,大家可以对比一下,以便更好地了解这一行代码。 这样,我们就完成了新增窗体的制作,关闭当前的新增窗体(可以同样给窗体添加说明,比如,我们这里可以添加这样的字符说明:员 工姓名_新增窗体) ,之后切换到控制面板界面,并将控制面page 13

板最大化显示。按以下路径定位:参数控制,员工姓名,点击员工姓名进入之后, 发现工具栏上仍然只有隐藏和关闭两个按钮。这是因为导航按钮上并没有勾选该对象的新增复选框(功能)的原因。按以下路径定位:系统 管理,导航按钮设置,进入导航按钮设置之后,再单击左边的基础资料导航窗格,如下图所示:    如上图所示,由于我们这里是为员工姓名添加新增的功能,因此,选择员工姓名相对应的序号为 1 的记录,之后再单击工具栏上的修改 按钮,则如下图所示:    如上图所示:勾选新增复选框,之后关闭当前的页面,再次进入员工姓名页面,发现还是没有新增按钮,如同上一节一样,这是因为还 没有赋予访问权限的原因。在本系统中,如果不直接赋予访问权限,管理员也是没有任何对象的访问权限的。但是在这里的赋予权限,可以 比上一小节所讲到赋予访问权限可以更为直接一些。 按以下路径定位:系统管理,部门和组权限,之后双击管理员,展开管理员,选中管理员组,之后在右侧窗格中选择按钮名称为员工姓 名的条目,如下图所示:    之后再单击修改按钮,如下图所示:    如上图所示,读者比上一节权限设置区域已经新增加了一个新增复选框,这里的复选框的数目是与导航按钮那里的设置相对应的。勾选 新增复选框,之后单击关闭按钮保存修改。 这时,关闭当前界面,再次进入居住城市的数据界面,则会发现,工具栏上多了一个新增复选框。如下图所示:    在这里,我们可以尝试输入一下记录,比如输入:张三,之后单击保存按钮保存录入(如果不单击保存按钮,则不会将数据录入数据库, 单击关闭则是放弃新增数据) ,则会弹出确认对话框,确认输入, (不关闭的话,则可以继续输入) ,如下图所示:    如果你企图保存空数据的话,会有如下的错误提示:    如果你企图输入重复的记录的话,比如已经输入了张三,企图再次输入张三,则会如下图所示:    为什么这里一定要禁止重复值的录入呢?那是因为这里是选项列表,既然是选项列表,怎么会需要重复值呢? 请注意到表的字段设计,这里我根据需要,定义了该字段的长度是 20 ,也就是说,最多只允许输入 20 个字符,如果超过了这个限 制,则会如下图所示:    此时,单击结束 (E) 按钮返回,修改输入的数据,重新保存即可。 4.4 界面的美化 在功能上,新增窗体是完成了,出于美观的考虑,我们还可以做点美化的工作,操作步骤如下: 在设计视图打开新增窗体,选中员工姓名的文本框(而不是标签) ,之后再击工具栏上的填充 / 背景色按钮 ,选择黄色,如下图所示:    之后再次选中员工姓名的文本框(而不是标签) ,之后再击工具栏上的特殊效果 ,选择平面,如下图所示:    之后再次选中员工姓名的文本框(而不是标签) ,之后再击工具栏上的线条 / 边框颜色 ,选择深灰色,如下图所示:    之后再打开该文本框的属性对话框,选择格式选项卡,将背景样式,由常规修改为透明,如下图所示:    完成修改后,关闭保存。当再次在正常界面打开新增窗体,则如下图所示:    是不是比之前美观了?当然,美化的工作可做可不做,取决于您自己的喜好。 4.5 修改窗体的制作 前面我们已经提到,为了便于进行权限的管理,我们禁止掉了员工姓名的主数据界面的编辑功能,只通过特定的功能按钮来实现,前面    我们已经完成了新增功能的制作,下一步,就是修改功能的制作了。同理,修改功能也需要在单独的界面里完成,因此,我们需要先制作修 改窗体,修改窗体的建立的操作步骤如下: 如新增窗体的制作一样,先新建一个新的空白窗体,之后添加文本框控件并重新命名该控件(文本框的标签显示更改为:员工姓名,文 本框的名称属性——如新增窗体所示,更改为:ygxm) ,之后显示窗体页眉页脚,并调整大小,同时保存当前的窗体设计,将窗体按之前提 到命名规则,命名为: frmyg_child_Edit ,与新增窗体操作步骤一样的部分,在这里不再重复讲述,调整好的窗体如下图所示:    下 一 步 与 上 一 节 类 似 , 把 ActiveX_02 窗 体 一 区 ( 注 意 , 这 次 是 ActiveX_02 窗 体 ) 内 的 控 件 全 部 拷 贝 到 当 前 正 在 编 辑 的page 14

 frmyg_child_Edit 窗体窗体页眉内并适当的调整各个控件的布局,如下图所示:    根据上一节介绍的方法调整控件布局,并实际调整窗体显示的大小,完成输入控件的美化工作,如下图所示:    调整完成之后,打开该窗体属性,选择格式选项卡(通过拖拽的方式可以拉长该属性窗口) ,分别执行以下属性修改: 标题:无默认值,输入以下字符:员工姓名修改; 滚动条:默认值为两者都有,修改为:两者均无; 记录选定器:默认为是,修改为:否; 导航按钮:默认为是,修改为:否; 分隔线:默认是为,修改为:否; 自动调整:默认为是,修改为:否; 自动居中:默认是否,修改为:是; 边框样式:默认为可调边框,修改为:对话框边框; 最大化最小化按钮:默认为两者都有,修改为:无; 关闭按钮:默认为是,修改为:否。 之后再单击数据选项卡,执行下列属性修改: 允许添加:默认为是,修改为:否。 之后再选择其他选项卡,分别执行以下属性修改: 弹出方式:默认为否,修改为:是; 模式:默认为否,修改为:是。 修改完毕之后,关闭窗体属性对话框保存修改。 进行到这里,我们切换到数据库窗口,单击模块选项卡,再单击新建按钮,如下图所示:    单击新建按钮后,如下图所示:    在该界面中输入以下代码(蓝色为变量名称,是个性化字符,可以自由定义,但是不能违反标识符命名规则) : '文本型变量 Public selectstr As String 之后单击工具栏上的保存按钮,输入任何的模块名称,比如我们这里输入 variable ,之后确认保存,关闭代码窗口,再在设计视图打开 frmyg_child ,之后单击员工序号文本框,在激活的右键快捷菜单中选择属性,如下图所示:    在打开的文本框属性对话框中选择事件选项卡,之后再单击获得焦点文本框,之后再单击之后出现的 按钮,如下图所示:    单击后面的三个小点后,会如下图所示:    如上图所示,选择代码生成器,再单击确认按钮,则如下图所示:    在鼠标的光标处输入下列代码: On Error GoTo Err_ygId_GotFocus: selectstr = Me.ygId Forms!usysfrmMain!labFind.Tag = 1 Forms!usysfrmMain!btnEdit.Tag = 999 Exit_ygId_GotFocus: Exit Sub Err_ygId_GotFocus: Resume Exit_ygId_GotFocus 以上字符,蓝色给个性化字符,如果您看不懂以上的代码,则将其中的蓝色字符替换为你的场景中适当的字符即可。输入完毕之后如下 图所示:    确认无误关闭代码窗口,保存修改,之后再打开该窗体的属性,即 frmyg_child 的窗体属性,选择事件选项卡,在成为当前文本框中输 入以下内容: =selectrecord() 。如下图所示:    关闭窗体属性保存输入,关闭 frmyg_child 窗体并切换到 frmyg_child_Edit 窗体,之后再打开该窗体的窗体属性,选择事件选项 卡,单击加载文本框,之后再单击该文本框之后出现的 按钮,之后选择代码生成器,单击确认按钮,如下图所示:    在鼠标光标处,输入以下代码: Me.RecordSource = "Select * FROM tblCodeyg Where ygId = '" & selectstr & "'" 同样,蓝色字符为个性化字符,如果你看不懂,在您的环境中适当替换即可。 确认输入无误之后,关闭该代码窗口,之后再关闭窗体属性以保存修改。进行到这里,我们该进行一个必要的操作,给该设计窗体的文 本框控件添加数据源。打开员工姓名的文本框属性,选择数据选项卡,控件来源对话框中输入:ygxm。请注意,这里的控件来源,一定要 填表的实际字段名称匹配。如下图所示:    之后再按以下路径定位:视图(V)→代码(C) ,单击代码后,如下图所示:    在鼠标光标处,输入以下代码: Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object) If IsNull(Me.ygxm) Then MsgBox "请输入员工姓名!", vbCritical, "提示:" Me.ygxm.SetFocus Exit Sub End If Me.Refresh DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child" DoCmd.Echo True '触发子窗体计时器事件 Forms!usysfrmMain!frmChild.Form.TimerInterval = 300 DoCmd.Close acForm, "frmyg_child_Edit" End Sub 同理,蓝色字符为个性化字符。完成之后如下图所示:    进行到这里,修改窗体就已经做好了,关闭当前所有设计界面,之后如新增窗体一样,先添加导航按钮的修改属性,之后再给管理员组 添加修改的权限。最后别忘记page 15

了给窗体属性添加说明文字,比如这里的场合:员工姓名 - 修改窗体。 下面我们来试验一下修改效果,先使用新增功能,多添加几条记录,比如李三、王五,如下图所示:    选中本图中序号为 Y02 的李三,之后单击工具栏上的修改按钮(再强调一次,如果不进行导航按钮属性添加和权限赋予,这里是不会 出现修改按钮的) ,则如下图所示:    将李三修改为李四,之后单击关闭按钮,则如下图所示:    如上图所示,这就是我们所要的修改的功能,符合我们的设计要求。但是还有一点瑕疵,那就是我们刚才单击的是序号为 Y02 的记录, 但是当关闭掉修改窗体的时候,系统却自动定位到第序号为 Y01 的记录,这样做似乎不太好,如果记录太多的话,无法核实是否完成了所 要的修改,下一节,我们就来实现这一功能,修改完毕之后,返回到起先选定的修改记录。    4.6 返回修改记录的原始定位 第一:进入 variable 模块的代码编辑界面,输入以下代码: '文本型变量 Public g_CurrentSelectStrID As String 完成之后如下图所示:    第二:在设计视图打开 frmyg_child 窗体,之后打开该窗体的属性,选择事件选项卡,如上一节所述,进入计时器触发(把滚动条向 下拉,就会看到计时器触发事件)的代码编辑页面,如下图所示:    在鼠标光标处,输入以下代码: Acchelp_FindstrRecord (g_CurrentSelectStrID) '计时器执行一次后不再执行 Me.TimerInterval = 0 第三:进入 frmyg_child_Edit 窗体的设计视图,按以下路径定位:视图 (V), 代码 (C) ,进入该窗体的代码页面,如果你是按照本 教程练习下来的话,会看到有这样的三行代码: Private Sub Form_Load() Me.RecordSource = "Select * FROM tblCodeyg Where ygId = '" & selectstr & "'" End Sub 如上所示,在第二行和第三行中加这样一行代码: g_CurrentSelectStrID = selectstr 完成之后如下图所示:    如上图所示,大家会看到这一行代码:    其实,这一行代码,本来应该在这一步才应该添加的,在上一节中,为了减少本节的叙述,我在上一节中就直接添加上了。 第四:现在我们就可以试验一下效果,切换到控制面板,进入员工姓名,我们现在就李四这一数据修改为:李三,输入之后单击关闭按 钮,则会返回修改的记录,比上一节的效果好了很多,可以确认修改是否正确,这在记录比较多的时候,是很有用处的,如下图所示:    4.7 删除功能的添加 相对于新增功能和修改功能而言,删除功能的制作就显得相当简单了。 进入 frmyg_child 窗体的设计视图,之后直接进入该窗体的代码页面,如下图所示:    新起一行,输入以下代码: Public Sub btnDel() If MsgBox("您确认要删除吗?", vbYesNo + vbInformation, Forms!usysfrmLogin.Caption) = vbYes Then DoCmd.Echo False Call AccHelp_DeleteFldstrRow ("tblCodeyg", "ygId", selectstr) Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child" DoCmd.Echo True End If End Sub 确认无误之后,保存修改,之后再如前所述,添加导航按钮的删除属性,之后再赋予管理员组删除权限。 4.8 基础资料小结 如上所述,完成其他基础资料表的制作,如下图所示:    写在这里,我们认为有必要做一个小结 : 第一:我这里的操作步骤,是按照教学的步骤讲的,便于初学者理解和掌握,在实际操作过程中,出于省时的目的,可以将多个步骤合并, 比如, 可以一次性勾选所要用到的所有导航按钮并一定性赋予启用、 打开、 新增、 修改、 删除等权限, 不用如同本教程这样严格按照顺序来; 第二:在代码中,采用了很多平台内置自定义函数和平台内部的系统窗体,当你发现莫名其妙的函数和莫名其妙的句子的时候,请不感觉 到特别疑惑; 第三:关于类似的基础资料<报销类别>窗体的制作,这里就不讲制作过程了,其实,也可以这样进行,复制前面制作的<员工姓名>窗体, 之后修改相关参数即可,比如在这个环境中,我把<员工姓名>的相关三个窗体复制一遍,之后修改所有相关参数,即可完成<报销类别>的 制作,当然,这样的操作是需要对本系统有一定的了解才可以熟练运用的。 注:为了不影响下面的制作,请大家建报销类别窗体时候最好是按照建议的方式命名 报销类page 16

别主窗体 : frm_CodeBxlb_child 报销类别新增窗体: frm_CodeBxlb_child_add 报销类别修改窗体: frm_CodeBxlb_child_edit 第五章 报销明细窗体的设计 5.1 创建查询 已经介绍了基础资料窗体的制作,现在该制作报销明细窗体了。报销明细窗体的基础功能与基础资料窗体类似,但是多了查找、导出、 打印三个功能,因此,从技术上讲,要略微复杂一些。 因为要制作查询,所以,基于这类需要制作查询的功能窗体在制作时就不能直接取表做数据源,正确的做法应该基础于表制作查询,之 后再取查询做数据源。 下面,我们就详细地介绍一下这类功能窗体的制作过程。 如前所述,按住 shiift 键,双击打开 AccDev.mdb ,之后定位到窗体窗格,双击 usysfrmLogin 窗体,在弹出的登录对话框中输入 正确的工号和密码,点击登录按钮登录系统,之后切换到 AccDev 数据库窗口,定位到查询窗格,如下图所示:    选定在设计视图中创建查询,之后单击设计按钮,如下图所示:    这样的界面我们在前面已经介绍过了,其实大致的操作与前面所介绍的是一致的,无非是一个不需要保存设计(此种情况即是利用该设 计界面自动生成查询语句) 而一个需要保存设计 , (创建一个实际的查询对象) 当前界面, 。 依次添加 tblCodeyg 、 tblCodeBxlb 、 tblBxmx 三个表(一次只能添加一个表,选中该表后,单击添加按钮) ,之后单击关闭按钮关闭显示表对话框,如下图所示:    表添加后,系统已经自动给我们建好了临时关系,这是因为主表 tblBxmx 内包含于 tblCodeBxlb 和 tblCodeyg 两表同样的字段, 所以,系统已经自动帮我们建好了关系,如果没有的话, 比如建 tblBxmx 与 tblCodeBxlb 的关系, 只需要单击选中 tblBxmx 表的 lbId 字段,按住鼠标左键不松,之后直接拖到 tblCodeBxlb 表的 lbId 字段上松开即可,其结果也是如此图一般。 下一步,分别按顺序双击 tblBxmx 表的 mxId 、 bxrq 字段, tblCodeBxlb 表的 lbmc 字段, tblCodeyg 表的 ygxm 字段, tblBxmx 表的 bxje 、 bxzy 字段,其结果如下图所示:    如上图所示,在所有的下半格的字段行中,为所有的字母字段名称添加中文标签,比如 mxId ,在前面添加一个“ 报销编号 : ”,其结 果就是:“报销编号 : mxId ”(注意:其中的冒号是英文冒号,如果用中文冒号,会出错的) ,其他的字母字段名称都如此操作,注意,添 加的中文标签要与字段说明书里的一致。其结果如下图所示:    由于这个查询比较简单,设计到这里,就算完成了,单击保存按钮(或文件菜单的另存为命令)保存设计,命名为: qryBxmx 。保存 后即关闭此窗体设计视图,给此查询对象属性添加相应的说明。 5.2 基础数据界面的制作 前面已经介绍过基础资料的基础数据界面的制作(即不含查找功能的功能窗体) ,现在我们顺着上面的已经完成的部分继续进行,由于基 础资料部分对窗体的操作已经介绍得很详细了,故在这里将简略介绍,如果有不明白的地方,可以参考基础资料的基础数据界面制作。 定位到窗体窗格,新建一个窗体并进入设计界面,如同前面介绍的那样,打开窗体属性,切换数据选项卡,如下图所示:    单击记录源文本框后面的 三个点的按钮 ,在弹出显示表对话框中,选择查询选项卡(默认是表选项卡) ,如下图所示:    选择 qryBxmx ,之后单击添加按钮,如下图所示:    如前面的介绍的一样,直接双击 qryBxmx 列表框中的 * 号,选择所有的字段,之后单击该设计视图的右上的角的关闭按钮(偏下的 一个,最上面的那个是退出系统的关闭按钮) ,如果操作没有错误的话,则如下图所示:    系统自动在记录源添加了这样的语句: Select qryBxmx.* FROM qryBxmx; ,当然,如果你可以直接写的话,就不用进入刚才的设 计界面,直接书写即可,关闭窗体属性,之后按住 shift 键分别点选浮动数据列表的报销编号和报销摘要,则会将所有字段选中(也可以按    住 Ctrl 键一个一个地点选) ,如下图所示:    按住鼠标左键不松,将所有的字段全部拖放到窗体上去并关闭该浮动数据列表窗口(还可以点击工具栏上的显示字段按钮再次显示) ,如 下图所示:    如上图所示,将所有文本框标签的冒号删除,其结果如下图所示:    修改窗体属性的格式选项卡的默认视图属性,更改为:数据表,并将数据选项卡的记录集类型属性修改为:快照。之后保存设计,命名 为 frmBxmx_child 。 在报销page 17

管理窗格下添加报销管理的导航菜单,如下图所示:    保存之后,赋予管理员相应的权限,之后单击报销管理窗格,之后再击报销管理按钮,如下图所示:    5.3 新增窗体的制作 在基础资料部分,已经介绍了新增窗体的制作,与现在不同的情况是,那只涉及到两个字段的新增(其中还有一个是由系统负责自动产 生数据的字段,实际上说一个字段也可以) ,而当前则涉及到六个字段(也可以说是五个) ,差异很小,因此,我们在这里,对前面提到一致 的部分,就一笔带过,着重讲述不一致的地方。 在进行之前,先进行一个必要的工作,即将 frmBxmx_child 窗体的记录集类型修改成快照(窗体属性 - 数据选项卡 - 记录集类型) 。 之后在数据库窗口,新建一个空白窗体,之后关闭工具箱的向导,之后依次拖拽五个文本框(因为有一个字段的数据将由系统自动产生) , 如下图所示:    依次修改各个文本控件的标签,从上到下分别是:报销日期、 报销类别、员工姓名、报销金额、报销摘要、之后再依次修改各个文本框 的名称属性(属性-其他选项卡-名称) ,从上到下依次是:bxrq 、lbId 、ygId 、bxje 、bxzy ,如下图所示:    为了防止出现计算机故障或者误操作而导致工作丢失的情况,可以现在就保存设计,将窗体的命名为: frmBxmx_child_Add 。 参考基础资料部分的新增窗体的制作过程,进行当前窗体的布局调整和界面美化,并保存,完成之后如下图所示:    之后再按照如基础资料新增窗体那样介绍的一样修改窗体属性, 唯一不同的是将窗体的格式选项卡的标题的属性命名为: 报销明细新增。 其他的都一致。之后进入该窗体的代码编写界面,输入下面的代码: Option Compare Database Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object) Select Case Button Case "保存" cmd_Save Case "关闭" DoCmd.Close End Select End Sub Private Sub cmd_Save() Dim rst As DAO.Recordset If IsNull(Me.bxrq) Then MsgBox "请输入报销日期!", vbCritical, "提示:" Me.bxrq.SetFocus Exit Sub End If If IsNull(Me.lbId) Then MsgBox "请输入报销类别!", vbCritical, "提示:" Me.lbId.SetFocus Exit Sub End If If IsNull(Me.ygId) Then    MsgBox "请输入员工姓名!", vbCritical, "提示:" Me.ygId.SetFocus Exit Sub End If If IsNull(Me.bxje) Then MsgBox "请输入报销金额!", vbCritical, "提示:" Me.bxje.SetFocus Exit Sub End If Me.Refresh If MsgBox("您确认要保存吗?", vbOKCancel + vbInformation, "提示") = vbOK Then Set rst = CurrentDb.OpenRecordset("tblBxmx", dbOpenDynaset) rst.AddNew rst("mxId") = acchelp_autoid("M",10, "tblBxmx", "mxId") rst("bxrq") = Me.bxrq rst("lbId") = Me.lbId rst("ygId") = Me.ygId rst("bxje") = Me.bxje rst("bxzy") = Me.bxzy rst.Update rst.Close Set rst = Nothing '刷新数据 If IsLoaded("usysfrmMain") Then DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child" DoCmd.Echo True End If MsgBox "保存成功!", vbInformation, "提示" Me.bxrq = Null Me.lbId = Null Me.ygId = Null Me.bxje = Null Me.bxzy = Null End If End Sub 大家可以对比一下代码的差异,其实,实质性的差异很小。 进行到这里,下面的工作就与以前的不同,选择报销类别文本框,右键,选择更改为级联菜单的,组合框命令(当初也可以直接拖拽组合框) , 如下图所示:    之后再将员工姓名的文本框也更改为组合框,完成之后如下图所示:    请注意在前面已经修改过的文本框格式选项卡的背景样式的属性已经自动由透明变成了常规,现在重新修改为透明。 之后再次选中报销类别的组合框,激活右键菜单,选择属性对话框,如下图所示:    之后选择属性,在弹出的属性对话框中选择数据选项卡,点选行来源文本框,之后再点选之后出现的 按钮,由于这种的界面我们来过 很多次了,所以,就不再截图,略微叙述一下,点选 按钮进入之后,在弹出显示表对话框中选择 tblCodeBxlb 表(因为我们选择的是报 销类别文本框)添加,之后如前所述说的那样,双击 * 号,表示选择所有字段,如前所述说的那样单击关闭按钮,则会退回到组合框的属 性对话框,并自动在行来源(请注意,是行来源)文本框里生成一段 SQL 语句代码,在当前环境下,是这样的: Select tblCodeBxlb.* FROM tblCodeBxlb; 之后依次在此属性page 18

对话框里修改以下属性: 数据选项卡 绑定列: 1 格式选项卡 列数: 2 列宽: 0cm ; 2cm 列表行数: 20 列表宽度: 2cm 修改完毕之后,关闭属性对话框以便保存修改。至于员工姓名组合框,如报销类别如此这样修改即可。无非是在选择表的时候选择与其 相对应的表,即选择 tblCodeyg 表。其他的属性修改操作完全一致。 到了这里,新增界面的工作就完成了,添加窗体说明,导航和分配权限之后,即可测试其功能如何,之后进入下一步工作。当然,为了 便于操作的目的,还可以进行一些锦上添花的修改,我们在后面将继续叙述。    5.4 修改窗体的制作 同样,在基础资料部分,已经介绍了修改窗体的制作,与现在不同的情况是,那只涉及到一个字段的修改,而当前则涉及到五个字段, 差异很小,因此,我们在这里,对前面提到一致的部分,就一笔带过,着重讲述不一致的地方。 如新增窗体的制作一样,先新建一个新的空白窗体,之后添加五个文本框控件,之后显示窗体页眉页脚,并调整大小,之后如前所叙述 的那样,将相应的 ActiveX_02 窗体中的相应控件拷贝过来,并调整布局,之后保存当前的窗体设计,将窗体按之前提到命名规则,命名 为: frmBxmx_child_Edit ,与新增窗体操作步骤一样的部分,在这里不再重复讲述,调整好的窗体如下图所示:    依次修改各个文本控件的标签,从上到下分别是:报销日期、报销类别、员工姓名、报销金额、报销摘要,之后再依次修改各个文本框 的名称属性(属性 - 其他选项卡 - 名称) ,从上到下依次是: bxrq 、 lbId 、 ygId 、 bxje 、 bxzy ,之后再依次修改各个文本框的 控件来源属性(属性 - 数据选项卡 - 控件来源) ,从上到下依次是: bxrq 、 lbId 、 ygId 、 bxje 、 bxzy (新增窗体不需要设置数 据源,但是修改窗体则一定需要设置数据源) ,如下图所示:    按照以前介绍的方法进行界面的美化工作,完成之后如下图所示:    之后,将报销类别和员工姓名更改为组合框,其行来源和其他属性修改与新增窗体完全一致,完成之后如下图所示:    之后再修改窗体属性: 格式选项卡: 标题:报销明细修改; 滚动条:两者均无; 记录选定器:否; 导航按钮:否; 分隔线:否; 自动调整:否; 自动居中:是; 边框样式:对话框边框; 控制框:否(新增窗体不需要修改这一属性) ; 最大化最小化按钮:无; 关闭按钮:否。 数据选项卡, : 允许添加:否。 其他选项卡: 弹出方式:是; 模式:是。 修改完毕之后,关闭窗体属性对话框保存修改。 如前所述,由于全局变量已经定义,这里就不要再定义了,直接进入 frmBxmx_child 窗体的设计界面,之后右键单击报销编号的文 本框,进入属性界面后,再进入事件选项卡的获得焦点事件的代码输入界面,如下图所示:    在鼠标光标处输入以下代码: On Error GoTo Err_报销编号_GotFocus: selectstr = Me.报销编号 Forms!usysfrmMain!labFind.Tag = 1 Forms!usysfrmMain!btnEdit.Tag = 999 Exit_报销编号_GotFocus: Exit Sub Err_报销编号_GotFocus: Resume Exit_报销编号_GotFocus 其结果如下图所示:    如前所述说的那样,确认无误关闭代码窗口,保存修改,之后再打开该窗体的属性,即 frmBxmx_child 的窗体属性,选择事件选项卡, 在成为当前文本框中输入以下内容: =selectrecord() 。 关闭窗体属性保存输入,关闭 frmBxmx_child 窗体并切换到 frmBxmx_child_Edit 窗体,之后再打开该窗体的窗体属性,选择事 件选项卡,进入加载事件的代码编辑窗口,如下图所示:    在鼠标光标处输入以下代码: Me.RecordSource = "Select * FROM tblBxmx Where mxId = '" & selectstr & "'"    保存输入,之后在该段代码末尾处新起一行,输入以下代码: Private Sub ToolbarFrm_ButtonClick(ByVal Button As Object) If IsNull(Me.bxrq) Then MsgBox "请输入报销日期!", vbCritical, "提示:" Me.bxrq.SetFocus Exit Sub End If If IsNull(Me.lbId) Then MsgBox "请输入报销类别!", vbCritical, "提示:" Me.lbId.SetFocus Exit Sub End If If IsNull(Me.ygId) Then MsgBox "请输入员工姓名!", vbCritical, "提示:" Me.ygId.SetFocus Exit Sub End If If IsNull(Me.bxje) Then MsgBox "请输入报销金额!", vbCritical, "提示:" Me.bxje.SetFocus Exit Sub End If Me.Refresh DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child" DoCmd.Echo True '触发子窗体计时器事件 Forms!uspage 19

ysfrmMain!frmChild.Form.TimerInterval = 300 DoCmd.Close acForm, "frmBxmx_child_Edit" End Sub 完成之后如下图所示:    进行到这里,修改窗体的设计,就基本完成了,添加导航按钮、分配权限之后进行测试,测试成功之后进入下一步。 5.5 返回修改记录的原始定位 第一:如前所述,由于全局变量已经定义,所以,这里的第一步即是之前第二步。在设计视图打开 frmBxmx_child 窗体,之后进入该 窗体的计时器触发事情事件的代码编辑页面,如下图所示:    在鼠标光标处输入以下代码: Acchelp_FindstrRecord (g_CurrentSelectStrID) '计时器执行一次后不再执行    Me.TimerInterval = 0 关闭代码输入窗口以保存修改。 第二:进入 frmBxmx_child_Edit 窗体的代码页面,如果你是按照本教程练习下来的话,会看到有这样的三行代码: Private Sub Form_Load() Me.RecordSource = "Select * FROM tblBxmx Where mxId = '" & selectstr & "'" End Sub 如前所述,在第二行和第三行中加这样一行代码: g_CurrentSelectStrID = selectstr 必要的操作进行到这里,就实际上就已经完成了设置,至于详细的细节,可以参考基础资料的这一部分。 5.6 删除功能的添加 删除功能的制作非常简单。直接进入 frmBxmx_child 窗体的代码编辑页面,新起一行,输入以下代码: Public Sub btnDel() If MsgBox("您确认要删除吗?", vbYesNo + vbInformation, Forms!usysfrmLogin.Caption) = vbYes Then DoCmd.Echo False Call AccHelp_DeleteFldstrRow("tblBxmx","mxId",selectstr) Forms!usysfrmMain!frmChild.SourceObject = "frmBxmx_child" DoCmd.Echo True End If End Sub 仅此一步,之后照常规添加导航按钮、分配权限即可。 5.7 查询功能的设计与应用 前面基础数据界面的数据源取查询,就是为了这里实现查询,主要因为如果通过查询的界面的字段直接采用英文字段名称的话,并非十 分友好的设计。这会让一般的操作人员比较痛苦,与此同时,也没有必要让普通用户知道实际的字段名称。 查询的功能的添加很简单,直接进入 frmBxmx_child 窗体的代码编辑的页面,如下图所示 :    新起一行,输入下列代码: Public Sub btnFind() DoCmd.OpenForm "usysfrmFind" Forms!usysfrmFind!cobfldName.RowSourceType = "值列表" '文本型对应 3 ,日期型对应 1 ,数值型对于 2 Forms!usysfrmFind!cobfldName.RowSource = "报销日期;1;类别名称;3;员工姓名;3;报销金额;2;报销摘要;3;"    '指定查询数据来源 Forms!usysfrmFind!labDataSource.Caption = "qryBxmx" End Sub Public Sub FindEnd() Forms!usysfrmMain!frmChild.Form.RecordSource = Acchelp_ChildFormRecordSource("qryBxmx", "报销编号", True) End Sub 确认无误,保存修改。之后同时添加查询和导出导航按钮并赋予权限,之后进入报销管理界面,如下图所示:    如上图所示,单击查找按钮(注意到现在导出按钮不可用) ,则如下图所示:    假使在这里,我们要查询张三报销的手机费明细,则依次如此选择或者填写: 字段名:员工姓名;表达式:等于;关键字:李三。 以上选项,连起来的意思就是:员工姓名等于李三。选择完成之后,单击添加条件按钮,则如下图所示:    再依此如下继续选择: 字段名:类别名称;表达式:等于;关键字:手机费;条件:并且(表示这一个条件与上一个条件是并的关系) 。选择完成之后,如下图 所示:    单击添加条件按钮,则如下图所示:    确认符合你的查询要求之后,即可直接单击查询按钮执行查询,如果发现输入有错,则可以单击清除按钮清除代码区的显示,重新设置 查询条件,当前执行查询之后如下图所示:    请注意到这个时候已经显示出了查询结果,并且工具栏上的导出按钮亦已经被激活,单击数据查询的关闭按钮关闭数据查询对话框,就 可以仔细查看结果数据集了,如果你需要将该结果导出,亦是可以的。现在单击关闭按钮关闭数据查询对话框,之后再单击导出按钮,则如 下图所示:    如图所示,本开发平台默认提供四种导出格式,即: Excel 表格格式、记事本page 20

格式、 HTML 网页格式以及 MDB 的 Access 数据库 文件格式,这是本开发平台系统内置的功能,当设置了查询功能之后,该导出功能自动具备。 定义查询结果集导出的目的文件目录(单击导出文件目录之后的省略号 按钮即可通过鼠标单击的方式确定导出目录的文件路径) ,和导 出文件名称,并选择导出文件格式,在本例子中选择如下:    确认之后,单击导出按钮,其结果如下图所示:    我们可以看到,字段名称被自动做为结果集的标题栏,现在就可以对这个 Excel 表格进行随心所欲的编辑了,很好用的查询和导出的功 能。    或许有人会问,如果我想导出所有的数据怎么办,那也很简单,你设置一个所有数据都满足的查询的条件即可,比如日期类(介于两个 日期之间) 、数据类(介于两个数字之间) 、文本型(任何数据都不包含的一个特殊的字符串)都可以很方便地实现这一点。 如果要在查询之后,重新显示全部数据,就当前的例子来说,单击工具栏上的关闭按钮退出报销管理,重新进入即可。 6.1 控件使用说明 进行到这里,新增、修改、删除、查询、导出都已经完成了,只有报表浏览与打印功能尚未完成。我们先稍微停一下,进行一些必要的 优化工作。之所以没有混合到前面的内容一并完成,只要是考虑到了初学者的学习负担的问题,把大问题拆成若干个小问题来分别予以说明, 这样有利于初学者的学习。 6.2 日期控件的使用 新增窗体里的报销日期的输入控件,我们知道这个控件对应的字段是日期型的数据类型,只接受日期值的输入,而日期数据则是有特定 的格式的,对普通操作人员来说,一边输入一边还有注意格式,有些让人为难了。因此如果能将该控件的输入由键盘输入操作改成鼠标点选 操作,那么,因为格式的输入错误而导致的新增失败,则可以得以避免,因此,我们在这里,就进行这项工作。 直接进入 frmBxmx_child_Add 窗体的设计窗体,如下图所示:    如上图所示,选中报销日期控件文本框,将其删除,之后带点选工具箱上的其他控件按钮,如下图所示:    之后如下图所示:    之后,将鼠标停留在下面的倒黑三角数,则该列表自动向下显示,选中其中的这样的一个控件:    选中之后,鼠标就变了形状,在刚才删除报销日期文本框的位置,单击鼠标左键,如下图所示:    点击标签按钮,之后在在日期控件左边花画一个方形并输入报销日期,如下图所示:    如上图所示,报销日期和新添加的日期控件对其他控件不太对称,可以用前面鼠标拖拽的方法调整大小,这个方法,很简单,前面也介 绍过,这里就不再多说了。 调整之后如下图所示:    选中日期控件,之后单击右键,选择属性命令,之后在弹出的属性对话框中,选择其他选项卡,如下图所示:    将名称属性重命名为: bxrq ,之后把 Tab 键的索引更改为 0 ,完成之后关闭对话框保存修改。之后进入该窗体的加载事件的代码编 辑区,在鼠标光标处输入以下代码: Me.bxrq.Value = Date 之后注意到该界面下部有这样的代码: rst("bxrq") = Me.bxrq rst("lbId") = Me.lbId rst("ygId") = Me.ygId 将其中 rst("bxrq") = Me.bxrq 这一行的 Me.bxrq 修改为 Me.bxrq.Value ,再向下看,会看到这样的代码: Me.bxrq = Null Me.lbId = Null Me.ygId = Null    将其中的 Me.bxrq = Null 修改为 Me.bxrq.Value = Date ,完成之后,关闭保存修改。就这样,读者可以对比一下使用日期控件的 优点。这是新增窗体,由于修改窗体显示时,时间数据已经存在了,基本上不存在什么问题,可以不进行优化。这样的控件添加之后,只需 要单击该控件的小三角,就会出现日历,可以自由选择,系统会自动转化成实际的日期数据。 6.3 输入控件的格式调整 我们再回到输入窗体,注意到有一个货币字段,输入货币数字后,显示的是只是一个数字,缺少货币符号的前缀,总感觉有点别扭,在 这里,可以进行调整。 直接进入 frmBxmx_child_Add 窗体的设计窗体,进入报销金额文本框的属性对话框,选择格式选项卡,注意到有一个格式属性,如 下图所示,选择货币格式即可:page 21

    6.4 基础资料的快捷添加 我们现在发现一个现象,就是比如类别名称这一字段,其数据来源是来源基础资料的报销类别,而现在的情况是,如果在报销管理里输 入一个报销明细,却发现其报销类型在报销类别(员工姓名也有这个问题存在)的下拉列表中没有,这个时候,就要退出,到基础资料那边 去输入,显得很麻烦。因此,如果在新增窗体上就现成地增加一个按钮,直接执行添加操作,岂不很好?我们下面就来实现这个设想。 直接进入 frmBxmx_child_Add 窗体的设计窗体,将报销类别和员工姓名两个组合框拉短一点,如下图所示:    进入 ActiveX 窗体的设计界面,将二区的控见分别拷贝到报销类别和员工姓名后面,并适当调整大小以适应整体布局,完成之后如下 图所示:    进入刚添加的报销类别后面的按钮的属性对话框, ,将其名称命名为 cmdBX (属性-其他选项卡-名称) ,同理,员工姓名后面的一个命    名为 cmdYG 。之后进入该窗体的代码编辑界面,新起一行,输入这样的代码: Private Sub cmdBX_ButtonClick(ByVal Button As Object) DoCmd.OpenForm "frm_CodeBxlb_child_Add" End Sub Private Sub cmdYG_ButtonClick(ByVal Button As Object) DoCmd.OpenForm "frmyg_child_Add" End Sub 确保正确之后,退出保存。之后直接 frm_CodeBxlb_child_Add 窗体的编码编辑页面,注意到有这样一些代码: '刷新数据 If IsLoaded("usysfrmMain") Then DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frm_CodeBxlb_child" DoCmd.Echo True End If MsgBox "保存成功!", vbInformation, "提示" Me.lbmc = Null End If End Sub 将以上的代码修改如下: '刷新数据 If IsLoaded("usysfrmMain") Then If IsLoaded("frmBxmx_child_Add") = True Then Forms!frmBxmx_child_Add!lbId.Requery GoTo 100 End If DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frm_CodeBxlb_child" DoCmd.Echo True End If 100: MsgBox " 保存成功 !", vbInformation, " 提示 " Me.lbmc = Null End If End Sub 之后退出保存修改,之后直接进入 frmyg_child_Add 窗体的代码编辑页面,也会看到这样一段代码 : '刷新数据 If IsLoaded("usysfrmMain") Then DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child" DoCmd.Echo True End If MsgBox "保存成功!", vbInformation, " 提示 " Me.ygxm = Null End If End Sub    将上面的代码修改如下 : '刷新数据 If IsLoaded("usysfrmMain") Then If IsLoaded("frmBxmx_child_Add") = True Then Forms!frmBxmx_child_Add!ygId.Requery GoTo 100 End If DoCmd.Echo False Forms!usysfrmMain!frmChild.SourceObject = "frmyg_child" DoCmd.Echo True End If 100: MsgBox " 保存成功 !", vbInformation, " 提示 " Me.ygxm = Null End If End Sub 进行到这里,必要步骤的就进行完毕了,可以检测一下实际的功能是否正常。至于是否添加这个按钮,根据情况决定,如果要对基础资 料实现非常严格的权限控制,那么这里就可能不需要设置,因为一旦添加了这个按钮,权限控制就可能成为问题了。 6.5 自动跳转功能 这个功能根据各人的情况来决定,一般适用于组合框和列表框控件,即当组合框获得焦点时自动展开列表,当该组合框点选之后,自动 将焦点定位到下一个输入控件。 直接进入 frmBxmx_child_Add 窗体的设计窗体,进入报销类别组合框的获得焦点事件代码编辑界面,在鼠标光标处输入以下代码 : Me.lbId.Dropdown 之后关闭退出,再进入该组合框的更新后事件代码编辑界面,在鼠标光标处输入以下代码 : Me.ygId.SetFocus 同样,也进入员工姓名的获得焦点事件代码编辑界面,在鼠标光标处输入以下代码 : Me.ygId.Dropdown 之后进入该组合框的更新后事件代码编辑界面,在鼠标光标处输入以下代码 : Me.bxje.SetFocus 如此,这项工作就完成了。初学者可以实际测试一下该功能的实际效果。当然,根据情况,添加不添加此功能就看各人的习惯和爱好了。 7.1 报表制作的说明 报表的制作,通常是一个系统开发的最后进程,通常情况下,也是不可缺少的,在这里,我们设计了一个稍微复杂的报表的样例,考虑 到初学者的实际情况,我们将该过程分拆成三步,即静态报表,动态报表,多个动态报表。 7.2 静态报表的制作 静态报表即是无论执行什么查询, 报表始终不更改, 即是静态的报表, 不能根据动态显示查询的结果, 下面我们就介绍静态报表的制作。 单击报表导航窗格,如下图所示 :    单击选择使用向导创建报表,之后再单击新建按钮,如下图所示 :page 22

    选择报表向导,之后再下面的组合框里选择 qryBxmx ,如下图所示 :    单击确定按钮,则如下图所示:    将上图中的可用字段列表中的类别名称和报销金额移动到选定字段列表,如下图所示:    单击下一步按钮,如下图所示:    双击类表名称进行分组,即按类别进行分组,如下图所示:    继续单击下一步按钮,如下图所示:    在排序列表框序号为 1 的列表框中选择报销金额,之后可以单击后面的升序按钮更改排序类别,可以在升序和降序之间自由切换;之后 再单击汇总选项按钮,则如下图所示:    单击选中报销金额的汇总复选框,之后在显示选项区选择仅汇总单选按钮,即我们在这里不需要显示详细的明细数据,只显示一个汇总 数据即可,之后再选择计算汇总百分比按钮,如下图所示:    单击确定按钮,如下图所示:    再次单击下一步按钮,如下图所示:    在这里,不做修改,直接下一步,如下图所示:    在这里,不做修改,直接下一步,如下图所示    如上图所示 ,直接单击完成按钮,则如下图所示:    单击左上方按钮切换到设计视图,则如下图所示 :    将默认的 qryBxmx 的标签更改为按报销类别统计报表,并适当调整格式,如下图所示:    之后进入该报表的报表属性中(与进入窗体属性的方法一致) ,选择其他选项卡,选择工具栏中 rptToolBar 选项,如下图所示:    保存修改,关闭报表,将报表的名称从默认的 qryBxmx 更改为 rptBxmx 。之后切换到窗体窗格,直接进入 frmBxmx_child 窗体 的代码编辑界面,如下图所示:    这里已经频繁来过很多次了,新起一行,输入以下代码: Public Sub btnPrint() DoCmd.OpenReport "rptBxmx", acViewPreview End Sub 输入完成之后,保存修改,之后添加报销管理按钮的打印属性并分配“打印”权限,现在进入报销管理的界面就会发现多了一个“打印” 的按钮,如下图所示:    再随意增加几条测试数据,如下图所示:    之后单击“打印”按钮,则如下图所示:    这就是静态报表的效果,无论在前台如何进行查询条件的设置,比如,仅仅查询车费,想让报表只显示有关车费的报表,或者只显示某 一个人的报表,这种报表是做不到的,它只根据当前数据库中所有的数据进行统计产生一张符合当前数据库中的所有记录相适应的报表,这 种报表,虽然会根据当前数据库总体的记录情况自动修正报表,但是不能根据用户临时的特定的查询生成报表,显得比较呆板,所以,我们 称为静态。下面,我们将在当前的基础上进行动态报表的进一步制作。 7.3 动态报表的制作 我们接着上一小节继续进行。第一步:单击模块窗格,进入 variable 模块的代码编辑界面,如下图所示:    新起一行,输入以下代码: '在模块中声明报表数据源的全局变量 Public strRptReSource As String 保存输入,关闭模块。 第二步:切换到窗体选项卡,直接进入 frmBxmx_child 窗体的代码编辑界面,会看到有这样一段代码: Public Sub FindEnd() Forms!usysfrmMain!frmChild.Form.RecordSource = Acchelp_ChildFormRecordSource("qryBxmx", "报销编号", True) End Sub 如上所示,在第二行与第三行中加这样一行代码: ' 记录下来报表的数据来源 strRptReSource = Forms!usysfrmMain!frmChild.Form.RecordSource end sub 整段代码实际上就是给修改正了这个样子: Public Sub FindEnd() Forms!usysfrmMain!frmChild.Form.RecordSource = Acchelp_ChildFormRecordSource("qryBxmx"," 报销编号    ", True) '记录下来报表的数据来源 strRptReSource = Forms!usysfrmMain!frmChild.Form.RecordSource End Sub 确认输入无误后,保存输入并关闭该窗体。 第三步:切换到报表窗格,进入 rptBxmx 报表设计界面,打开报表属性,单击事件选项卡,进入打开事件的代码编辑界面,如下图 所示:page 23

    在鼠标光标处输入以下代码,如下图所示: '赋上查找后的报表数据源 If strRptReSource = "" Then Me.RecordSource = Forms!usysfrmMain!frmChild.Form.RecordSource Else Me.RecordSource = strRptReSource End If 保存输入,关闭报表,就这样,动态报表的制作就完成了。可以实际测试一下,比如,我们在报销管理界面,执行类别名称等于住宿 费的查询,之后再单击预览按钮,如下图所示:    现在大家就会发现现在的报表与之前的报表的不同之处,之前的报表无论你如何更换查询条件,单击预览按钮之后,报表始终是一样 的,而现在则可以随查询条件的不同而不同,从这个意义上说,之前的报表即是静态报表,当前的可以称为动态报表。 当前的报表是基于类别进行的统计的,如果我想浏览或者打印按人员进行的统计的报表,又该如何做呢?如何让系统提供一个可以切 换的面板呢?我们在下一节将着手解决这个问题。 7.4 动态报表切换面板的制作 继续上一节的操作,切换到报表窗格,参照静态报表的制作,再利用向导建立一个只包含“员工姓名”和“报销金额”的查询,除了所选的 两个字段与之前不一样外, 其他的全部一样, 完成之后, 修改报表的页眉, 并将报表名称命名为: rptBxmx_yg , 完成之后, 如下图所示 :    现在制作出来的是静态报表,还需要进行该报表的动态改造,参照动态报表制作的那一小节,可以发现,前两步都是所有基于该窗体的 所有动态报表所通用的,唯有第三步,是从属于各个报表的特性,参照动态报表的制作,我们直接进入该报表的打开事件编辑界面,输入以 下代码 : If strRptReSource = "" Then Me.RecordSource = Forms!usysfrmMain!frmChild.Form.RecordSource Else Me.RecordSource = strRptReSource End If 完成之后如下图所示 :    其实,这里录入的代码和另一个报表的代码是完全一致的。确认输入无误之后,保存录入并关闭报表。 好了,已经设计完成了两个动态的报表,现在就该设计一个中转的切换面板,可以使用户在查询之后选择要浏览的报表的种类或者未经 查询就直接浏览的报表种类。记得在前面静态报表的时候,我们在 frmBxmx_child 窗体的代码页面 录入过这样的一段代码 : Public Sub btnPrint() DoCmd.OpenReport "rptBxmx", acViewPreview End Sub 这段代码的意思就是说,当单击预览按钮的时候,就直接打开 rptBxmx 报表,但是我们现在有两个报表,因此,这样的场景的情况下, 无法使一个按钮直接与两个报表相对应,试想一下,如果我们单击这个按钮的时候打开一个窗体,通过这个窗体来选择显示哪一个报表,这 样一来,问题就可以得到解决,因此,鉴于此窗体的实际用途,我们可以将其称为切窗体,或者切换面板。在当前场景下,我们将该切换窗 体的名称事先定义为 : frmBxmx_child_rpt ,则应该将 frmBxmx_child 窗体的代码如下的一段代码修: Public Sub btnPrint() DoCmd.OpenReport "rptBxmx", acViewPreview End Sub 改为:    Public Sub btnPrint() DoCmd.OpenForm "frmBxmx_child_rpt" End Sub 这样一改,其意思就是说,当单击预览按钮的时候,就自动打开我们实现定义的 frmBxmx_child_rpt 的报表切换窗体,下面,我们就 来设计这个切换窗体。 新建一个窗体,将其名称定义为 frmBxmx_child_rpt ,之后进入窗体属性,进行以下属性设置: 格式选项卡: 标题:无默认值,输入以下字符:请选择您所要浏览的报表; 滚动条:默认值为两者都有,修改为:两者均无; 记录选定器:默认为是,修改为:否; 导航按钮:默认为是,修改为:否; 分隔线:默认为是,修改为:否; 自动调整:默认为是,修改为:否; 自动居中:默认是否,修改为:是; 边框样式:默认为可调边框,修改为:对话框边框; 控制框:默认为是,修改为:否; 最大化最小化按钮:默认为两者都有,修改为:无。 关闭按钮:默认为是,修改为:否; 其他选项卡: 弹出方式:默认为否,修改为:是。 请注意一点,在这里,多数的属性修改与前面讲的新增修改的属性修改基本一致,但是有一点请特点注意,前面的窗体属性设置,无论 是新增窗体还是修改窗体,均修改了其他选项卡的模式属性,将其从默认值否,修改为是,但是在这个切换面板的场合,此属性切不可修改, 否则,会出现莫名其妙的问题——虽然不致于让系统无法使用,但是毕竟显得太不合理了,有兴趣的可以试试是什么效果。修改完毕之后, 关闭窗体属性对话框保存修改。 单击工具箱上的选项组按钮 ,之后在窗体上选择适当位置放置,如下图所示:    删除该选择组的标签,之后再单击工具箱中的选项按钮按钮 ,即单选按钮按钮,放置两个于选项组区域内,如下图所示page 24

    由于单选按钮默认带了一个标签控件,我们就先修改其携带的两个标签,将第一个名为 Option2 标签修改为:按报销分类统计报表浏 览,将第二个名为 Option4 标签修改为:按员工姓名统计报表浏览,并调整各个控件在窗体上的布局,如下图所示:=    单击工具箱上的命令按钮按钮 ,在选项组控件下面放置两个命令能按钮,将第一个命令按钮命名为确定,将第二个命令按钮命名为取 消,如下图所示    基本布局已经基本完成,现在进行属性修改: 第一:打开选项组的属性,选择其他选项卡,将默认的 Frame0 名称修改为 Select_rpt ,如下图所示    第二:打开单选按钮“按报销分类统计报表浏览”的属性,选择数据选项卡,将选项值由默认的 1 修改为 7 ,如下图所示    同理,将“按员工姓名统计报表浏览”单选按钮的该选项值修改为 8 ; 第三:打开命令按钮“取消”的属性,选择其他选项卡,将名称属性修改为 cancel ,如下图所士:    之后切换到事件选项卡,进入单击事件的代码编辑页面,如下图所示:    在代码光标处输入以下代码: DoCmd.Close 输入之后保存,并关闭代码输入页面,关闭“取消”的控件属性,之后打开确定按钮的属性,将其它选项卡的名称修改为 OK ,如下图所 示:    之后切换到事件选项卡,进入到单击事件的代码输入界面,如下图所示:    在鼠标光标处输入以下代码: Select Case Me.Select_rpt Case 7 '预览报表 - 按报销类别 DoCmd.OpenReport "rptBxmx", acViewPreview Case 8 '预览报表 - 按员工姓名 DoCmd.OpenReport "rptBxmx_yg", acViewPreview End Select DoCmd.Close acForm, "frmBxmx_child_rpt" 请注意蓝颜色的个性化参数,我们对照前面的本小节的第一步和第二步,就会发现第一步和第二步做的属性设置在这里得到了反映,其 实,前两步不修改其属性也是可以的,之所以修改,就是为了让初学者能读懂这一段重要的代码,明白那里的属性和这里代码的对应关系。 保存输入,之后关闭代码输入界面,并关闭属性对话框,之后按之前所学的方法,调整该窗体运行时的实际显示大小,如下图所示:    调整完成之后,所有的实际设计工作也就完成了。关闭该窗体,给该窗体增加说明:报销明细 - 报表切换面板。 我们可以测试一下,我们先进行查询,比如,查询李三的所有报销明细,如下图所示:    关闭数据查询对话框,单击打印按钮,则如下图所示:    选择“按报销分类统计报表浏览”,之后再单击确定按钮,则如下图所示:    如果选择“按员工姓名统计报表浏览”,之后再单击确定按钮,则如下图所示:    的确如我们起初预料的那样,动态报表的切换面板的工作圆满完成。我们在这里设计的是两个报表的切换,如果你有多个查询要求,可 以设计三个乃至更多个报表的切换面板,原理和两个报表的切换是一样的。 顺便多说一句,我们一直没有讲打印,事实上当以上的预览的报表出来之后,只需要直接单击工具栏上的 按钮就可以直接执行打印工    作。如果你看不到这个按钮,检查一下该报表属性,即检查该报表属性的其他选项卡的工具栏属性,检查一下,其值是否等于 rptToolBar , 如果不是这个值,那么,你很可能看不到打印按钮。 第八章 控制面板 8.1 部门以及用户组权限 本系统内置非常完善的权限控制体系,以减轻您的开发难度、保护您的系统安全。每一个系统用户都必须从属于一个权限组,而一个权 限组则必须从属一个部门,在权限体系中,部门是用来规划规划组的,本身不具有权限属性,而系统用户必须从属于权限组,也不具有任何 权限属性,只有权限组才拥有实际的意义,也就是说,您如果希望给某一个系统用户定义特殊的权限,您无法直接给这名成员赋予权限,而 只有新建一个用户组,给这一个用户组赋予权限,之后再在这个组的属性里新建用户,此时,这个用户就会自动获得该权限组所有的权限。 我们在这里,以一个示例来说明 , 比如,给普通的员工以查询的权限。首先进入权限组设置界面,如下图:    点击部门及组权限按钮,如下图所示:    单击新增按钮,选择新增部门,如下图所示:page 25

    输入部门名称为“普通部”,点击保存按钮 后 , 关闭新增权限组对话框,之后再次单击新增按钮 ,选择新增组命令,如下图所示:    此时在部门名称中选择普通部,之后在组别名称中输入常规查询组,点击保存按钮 ,关闭新增权限组对话框。 依次单击普通部,常规查询查询组,如下图所示:    之后再单击修改按钮,如下图所示:    这个界面我们已经来过了,选择常规权限,并单击确定按钮,如下图所示:    之后再选择报销管理,选择报销管理按钮,在权限设置选项目区选择打开和查找复选框,如下图所示:    点击保存按钮并确认添加权限的提示框保存修改 ,关闭部门及用户组权限设置对话框。这样一来,我们就新建了一个具有查询权限的权 限组,那么,每一个在该权限组下新建的用户,都将具有该权限组应该具有的属性,如果要调整权限,只需要调整权限组即可。之后点工具 栏上的关闭按钮,退出部门及用户组权限设置对话框。之后单击用户管理按钮,如下图所示:    单击新增按钮,如下图所示:    分别输入:工号: 002 ,姓名:李六,密码: 123 (正式场合可以要设置比较复杂的密码) ,部门选择普通部,权限组别选择常规查 询组,之后保存修改并退出系统,使用新建的 002 工号登录系统,会发现该员工只拥有系统管理里面的修改密码权限(系统自动赋予,任 何用户都将自动拥有) ,以及报销管理的查询权限(如果不赋予打开的权限,则该工号对应的用户将无法打开该窗体,因此,打开的权限, 在正式的赋权场合都应该赋予,除非你禁止了该用户对该对象的所有权限) ,如下图所示:    最后请注意,在这里的部门、用户、和用户和实际的公司的部门没有任何直接联系,在这里只是为了权限管理的需要,你只需要为每一 个要使用本系统的员工新建一个用户工号即可,并不需要为不使用本系统的员工各自新建工号。 8.2 备份与恢复数据库 请注意,在系统管理导航菜单命令区有一个备份数据按钮,如下图所示:    单击备份数据按钮,将会弹出如下图所示的提示:    此时,单击确定,则会退出系统,而单击取消,则会显示登录系统界面,重新登录系统即可正常使用。备份完成之后,在项目程序文件 路径目录里会多出一个以 .bak 的文件,当前日期加上 Data 做为文件名,如下图所示:    在本示例中,20081021Data.bak 就是执行备份命令之后所产生的备份文件,该文件即包含了当前所有的数据,将该文件妥善保存, 即可以保证您截止到你备份的时候的数据不会丢失。 如果您需要恢复数据,请按下列步骤操作: 第一:定位到程序目录; 第二:删除 AccDev_be.mdb 文件(即后台数据库文件,该文件可以任意命名和存放在任意路径) ; 第三: 将备份文件重命令为 AccDev_be.mdb 文件 (即你删除的后台数据库文件名称) 复制到后台数据库文件的原始目录即可, , 当然, 也可以复制到任意位置重新在前台数据库文件重新设定后台数据库文件的位置(这一点,在登录 Access 开发平台前台客户端这一小节已经 有所说明) 。 如此简单的几步,即完成了数据的恢复操作,您此时务必使用旧的工号和密码才能登录系统。每次重新恢复数据之后,在备份之后产生 的新的用户将全部丢失。也就是说,恢复是整体恢复,包括用户和密码。因此,保证备份文件的安全,也是保证数据安全的重要的一环。 8.3 密码管理 如果您要修改自己的密码,请登录系统后,点击系统管理,再单击修改密码按钮,如下图所示:    之后键入当前密码和输入两次新密码,单击 保存按钮 即完成密码的修改。 如果您是管理员,要为他人重新设置密码,请单击用户管理按钮,如下图所示:    选中您要重置的用户名,如下图所示:    之后单击修改按钮,如下图所示:    在此界面单击密码框后面的复位按钮,则会弹出提示,如下图所示:    如果确认修改,该用户的密码将被设置为 123456 ,单击取消则放弃修改。重置密码之后,被重置密码的用户可以使用 123456 的新 密码登录,之后就利用系统管理的“修改密码”修改密码(如前所示) 。 8.4 选项设置 如果你留心,会发现此前一直没有设置软件名称,这对一个成品软件或者商业软件来说,是不被允许的。如果您要进行程序的个性化设 置,请登录系统后,点击系统管理,再单击选项设置按钮,如page 26

下图所示:    本界面一共有两个选项卡,我们先讲常规选项卡,按照你的个性化要求,依次输入各项数据,本例的输入如下图所示:    输入完成之后,单击保存设置按钮保存输入,之后单击关闭按钮保存修改    单击关于命令,则如下图所示:    在这里,可以在“双击此更改客户名称”处设置客户名称,同时,注意到其他位置的提示,与在选项设置的常规页面输入的信息是一致的, 这里的信息显示,是根据选项设置的常规页面输入的信息动态更新的。 我们再回到刚才录入软件信息的选项设置界面,刚才是在常规选项卡进行的设置,现在单击安全选项卡,如下图所示:    注意到只有一个与 SHIFT 键是否禁用的选项设置,我们在前面的开发过程中,一再提到按住 SHIFT 键双击打开程序文件(前台程序 文件)才能进行程序的开发——在进行了必要的启动选项设置之后(本开发平台默认已经进行了这方面的工作) ,只有按住 SHIFT 键打开 程序文件才能进入设计界面, 也就是说, 在默认情况下, 按住 SHIFT 键就可以进入设计界面, 因此, 如果在程序开发完成之后, 如果 SHIFT 键的功能仍然有效,那么,将对程序的安全性造成威胁,也就是说,在开发完成之后,管理员在分发版本之前,就需要先禁掉 SHIFT 键的 这个特殊功能,在我们的开发平台中,已经默认集成了这个功能,只需要将此禁用的复选框选中即可。如果日后涉及到程序修改,只需要使 用管理员帐号登录系统将此禁用取消,即可按住 SHIFT 键进入设计界面进行编辑。 第九章 平台函数 9.1 平台函数说明 平台函数是指 Access 开发平台为了减轻开发难度,提高开发效率而开发的一系列实用、强大的自定义函数,我们在这里,只列举解 释一些比较基础和一些比较常用的平台函数,并不包含全部的平台函数。 9.2 自增序号    AccHelp_AutoID 自增序号函数 功能: AccHelp_AutoID 函数可用于自动编号,例如: B00001 B00002 B00003 …… 语法: AccHelp_AutoID(prefixion As String, IDlength As Integer, tblName As String, fldName As String) prefixion 编码前缀 , 如果不需要前缀,可用 "" 代替,如 AccHelp_AutoID("",5," 表名称 "," 字段名称 ") IDlength 编码位数 tblName 表名称 fldName 自增序号的字段名称 示例: '假定我们有表 tbl 部门代码表,其中有字段 DepaID( 部门代码 ) Debug.Print Call AccHelp_AutoID("D",2,"tbl 部门代码表 ","DepaID") '则产生的结果就是: ' D01 ' D02 ' D03 ' …… 9.3 定位记录 Acchelp_FindNumRecord 函数 ( 定位数字型 ) 功能: Acchelp_FindNumRecord 函数可用于定位某条记录。 语法: Acchelp_FindNumRecord (n) ,比如 n=3 时,即可以定位 3 这条记录。 示例: '在修改窗体的关闭事件中写下列代码: '假定当前修改的 ID 变量是 RecID, 则 Forms!usysfrmMain!frmChild.Form.ID.SetFocus' 这个 ID 要根据你子窗体中的实际字段名称而定 Acchelp_FindNumRecord (RecID) Acchelp_FindStrRecord 函数 ( 定位文本型 ) 功能: Acchelp_FindStrRecord 函数可用于定位某条记录。 语法: Acchelp_FindStrRecord (M) ,比如 M=H0003 时,即可以定位 H0003 这条记录 ,M 为文本型。 示例: '在修改窗体的关闭事件中写下列代码: '假定当前修改的 ID 变量是 StrID, 则 Forms!usysfrmMain!frmChild.Form.ID.SetFocus' 这个 ID 要根据你子窗体中的实际字段名称而定 Acchelp_FindStrRecord (StrID) 9.4 获得字段的名称 Acchelp_GetColumnName 函数 功能: Acchelp_GetColumnName 函数可用于获得表或查询中的字段名称,用分号隔开,用于组合框或列表框的行来源,组合框或列表 框的行来源类型必须选择值列表。 语法: Acchelp_GetColumnName(" 表或者查询名称 ") 示例 : Dim strSQL as string strSQL = Acchelp_GetColumnName("tbl 销售明细 ")    Debug.Print strSQL 9.5 判断生日到期天数 功能: Acchelp_Birdays 函数获得离生日到期天数。 语法: Acchelp_Birdays( 出生日期 , 目标日期 ) 示例: '假定某人的出生日期为 1989-2-1 , 目标日期为 2006-3-3 Dim x as Integer Dim sDate as Date Dim eDate as Date sDate = # 2/1/1989 # eDate =#3/3/2006# x =Acchelp_Birdays(sDate,eDate) Debug.Print x 9.6 获得年龄 Acchelp_ages 函数 功能: Acchelp_ages 函数获得年龄。 语法: Acchelp_ages( 出生日期 , 当前日期 ) 示例: '假定某人的出生日期为 1989-2-1 Dim x as Integer Dim sDate as Date sDate = # 2/1/1989 # x =Acchelp_Birdays(sDate,Date) Debug.Print x 9.7 判断表page 27

是否存在 fExistTable 函数 功能: fExistTable 函数可用于判断当前数据库中是否存在某个表。 语法: fExistTable(" 表名称 ") ,如果返回值为 True, 则表示该表存在,如果返回值为 False, 则表示该表不存在。 示例: If fExistTable("tbl 销售明细 ")=True Then Msgbox " 该表存在 " Else Msgbox " 该表不存在 " End If 9.8 判断表中是否存在记录 功能: CheckRecords 函数可用于判断某表中是否存在记录。 语法: CheckRecords(" 表名称 ") ,如果返回值为 True, 则表示该表有至少一条记录,如果返回值为 False, 则表示该表没有记录。 示例: '我们假定有表 tbl 销售明细 If CheckRecords("tbl 销售明细 ")=True Then Msgbox " 该表存在记录 " Else Msgbox " 该表不存在记录 " End If    9.9 删除记录 AccHelp_DeleteFldNumRow 函数(删除数字型) 功能: AccHelp_DeleteFldNumRow 函数根据某字段条件删除某表中某个字段符合条件 ( 必须是长整型数字 ) 的记录 , 一般用于根据 序号来删除表中的一条记录,亦可删除满足条件的多条记录。 语法: AccHelp_DeleteFldNumRow(" 表名称 "," 条件字段名称 ", 数字型变量 ) 示例: '下面的代码将删除表 tblSale 中字段 ID 中的值等于 100 的记录 Call AccHelp_DeleteFldNumRow("tblSale", "ID", 100) AccHelp_DeleteFldStrRow 函数(删除文本型) 功能: AccHelp_DeleteFldStrRow 函数根据某字段条件删除某表中某个字段符合条件 ( 必须是文本型 ) 的记录 , 一般用于根据文 本来删除表中的一条记录,亦可删除满足条件的多条记录。 语法: AccHelp_DeleteFldStrRow(" 表名称 "," 条件字段名称 ", 文本型变量 ) 。 示例: '下面的代码将删除表 tblSale 中字段 conID 中的值等于 S00005 的记录 Call AccHelp_DeleteFldStrRow("tblSale", "conId", "S00005") 9.10 判断表中字段存在某值 功能: Acchelp_StrDataIsExist 函数可用于判断某表中某个文本型字段是否存在某个值。 语法: Acchelp_StrDataIsExist(" 表名称 "," 字段名称 "," 文本值 ") ,如果返回值为 True, 则表示该表该字段中存在这个文本值, 如果返回值为 False, 则表示不存在。 示例: '我们假定有表 sys_tblMenu If Acchelp_StrDataIsExist("sys_tblMenu", "menuName", " 菜单二 ") = True Then MsgBox "sys_tblMenu 表中 menuID 字段中存在菜单二 " Else MsgBox "sys_tblMenu 表中 menuID 字段中不存在菜单二 " End If Acchelp_NumDataIsExist 函数 功能: Acchelp_NumDataIsExist 函数可用于判断某表中某个数字型字段是否存在某个值。 语法: Acchelp_NumDataIsExist(" 表名称 "," 字段名称 ", 数值 ) ,如果返回值为 True, 则表示该表该字段中存在这个文本值, 如果返回值为 False, 则表示不存在。 示例: '我们假定有表 sys_tblMenu If Acchelp_NumDataIsExist("sys_tblMenu", "menuID", 1) = True Then MsgBox "sys_tblMenu 表中 menuID 字段中存在 1" Else MsgBox "sys_tblMenu 表中 menuID 字段中不存在 1" End If 第十章 常见问题 10.1 ToolBar 控件图片与文字显示不正常 一、问题描述: 有些学员在使用《ACCESS 通用开发平台》时,那些新增、修改、隐藏 …… 关闭按钮有时显示正常,有时显示时,只显示图片不显示 文字。 二、解决方法: 将 《ACCES 开发平台》 文件夹下的 MSCOMCTL.OCX 文件替换计算机的 C 盘下的 C:\WINDOWS\system32( 这是我的电脑 ) 文    件夹中的同名文件,如找不到这个同名文件,可以搜索你电脑中 MSCOMCTL.OCX 文件的存放地址,然后替换它。    10.2 表达式“鼠标移动”产生错误 一、问题描述: 登录系统后,鼠标一移动即出现如下图的错误提示:    二、解决方法: 引起该错误的原因是引用中 OLE Automation 优先级不对,详情请参考本教程第 3 章的 3.5 节 检查控件引用完整性和引用顺序。    10.3 如何取消 Access 2003 的安全警告 如果您的 Office 企业版的版本是 2003 ,当您启动 Access 2003 应用程序时如果显示如下界面,则说明您的宏安全级别较高:    欲解决这个问题,详情请参考 Access 开发平台的运行环境。    10.4 日期控件的显示异常问题 由于本教程采用了日期控件,在迁移或重新安装系统之后,含有该控件的窗体可能会出现异常,可能的故障会如下图所示:    当出现这个界面时,单击结束按钮,则如下图所示:    在这里, 可以很清楚地看到, 由于报销日期采用了日期控件, 此时显示出现page 28

异常。 解决这个问题的办法就是双击程序目录下的注册控件.bat 文件即可。 但是此刻有一个注意事项必须引起牢记,那就是这个程序目录的文件夹不可以放在桌面上,这是因为桌面的文件路径中有一段 为“ Documents and Settings ”,因为这个路径名称中出现了空格,会影响批处理文件的执行,因此如果这个程序目录的文件夹放在桌面 上,那么,这个故障不一定能解除。 第十一章 结束语 11.1 结束语 课程进行到这里,想必您已经对本开发平台的特点已经有所了解了,作为当今国内唯一款基于 Access 开发的成熟的平台系统,想必 您自己会有所选择。 如果您想进一步学习该平台,那么可以登录我们的技术站点和我们的官方网站查看与我们的商业开发培训的相关的信息,以决定是否进 一步学习,如果你试图以此平台系统来做为赢利的手段,开展计算机培训或者软件开发等多种业务,那么,也可以和我们取得联系以便进一 步商洽。 上海盟威软件官方站点: http://www.umvps.com 上海盟威软件技术站点: http://www.accessoft.com    至此,教程学习完了,大家有不熟悉的地方可以再反复练习几次, 然后也可以试着给公司开发开发一些系统,有需要继续提高的 支持服务方面的 也欢迎大家报名本网站的培训    或者需求技术    学习比较好的爱好者并且能够给公司开发了系统    有需要联机更多台数或者互联网使用方面需求的,也可以考虑升级平台的企业版(SQL    server 版),以加强软件功能的更全面使用(注:企业版支持互联网使用功能,适合有分公司在使用该软件的)page 29

发布评论

评论列表 (0)

  1. 暂无评论