Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 推荐资源

access2003学习心得体会

时 间:2009-10-21 12:20:22
作 者:bluebird   ID:204  城市:广州
摘 要:我的ACCESS数据库终于设计完毕,从春节算起已经整整2个月了,其间经历了无尽的辛酸和痛苦,请教了太多的人,查阅了很多网页,终于解决了一些粗浅问题,有些体会,也总结了一些技术细节。
正 文:

  ACCESS不比WORD那么温柔可爱,虽然也是OFFICE家庭里的一个组件,可是其技术细节却要复杂得多,书上说设计好一个数据库非常轻松,但是我看并不轻松。也往往有很多口气特别大的人动不动就看不起ACCESS很弱智的功能,或者说它像玩具一样简单,可真要让他们解决ACCESS技术细节问题时,多半也会与我们一样傻了眼。我认为要用ACCESS设计好一个数据库非常不容易,最初的规划很重要,对数据库要实现的功能进行分析,细化成不同的模块,然后分析每个模块之间的联系,再对每个模块设计表。1个表尽量把相关的数据放在一起,多张表需要用到的数据最好单独存放成1张表。没有重复记录的表一定要设一个数据类型为“自动编号”的字段并设为主键,一般称为“xxID”,这个字段在其他表中需要用到时可作为外键调用。有时需要把好几张表的主键放在一张新表中调用,即全部是“xxID”字段,为避免重复录入数据,可将这几个字段一起选中并设为主键,称为复合主键。

 

  表建立完毕后,非常重要的一步是在“工具--关系”中建立各表间的关系,尽量考虑周全一些以免遗漏。关系建立好之后,各表中相关数据就自动链接在一起了,录入相当方便。关于一对多、一对一还是多对一的关系类型问题,我的经验是不用太在意,系统会自己分析好并瞬间设置清楚。

  

  查询可以基于表,也可以基于已有查询。遇到有重复的查询记录时采用Select distinct语句去除重复。有时因为加入了对应某几个相同字段而没有不同取值的“必选字段”时,查询结果中会出现重复记录,表现为除了那个必选字段的数据没有重复以外,其他字段被重复,此时进行汇总、分组等操作时会出现错误。解决办法是,另建一个查询,把刚才那个查询结果作为“一张显示表”放进去,在查询时避免选择那个会产生重复的字段即可。

 

  窗体是为了帮助录入的,如果不需要利用窗体协助录入则不必建立录入窗体。但是有一个特殊窗体非常有用--切换面板,这是ACCESS自动生成的,允许用户进行编辑。切换面板可以让程序默认调用,从而让用户打开数据库时就看到需要的菜单、按钮等内容。

 

  报表是在查询的基础上建立起来的,可以利用向导方便地建好报表,但是一般需要手工编辑方才符合要求(美观、布局等)。报表中有4大对象非常重要:报表页眉、页脚,页面页眉、页脚,分组页眉、页脚和主体,分别各司其职,切莫混淆。建立分组是通过右击页面页眉或者主体对象菜单选择“排序和分组”,然后可以点选需要的字段作为分组字段,并且可以选择是否使用分组页脚。“排序”也是在此操作。需要先排序再分组就把那个排序字段拖到分组字段前即可。重要:有时明明发现报表中已经没有任何东西了可是显示报表时老是提示有一文本框字段找不到,此时可检查“排序和分组”中是否应用了一个报表源中不存在的字段。另外,报表源也是一个重要细节,一定要设好报表源方可看到需要的字段。可以通过复制旧报表生成一个新报表然后根据需要重新指定报表源和编辑报表布局和内容。报表如果出现空白页面时一定是因为报表内的各种对象(文本框、标签、控件等)放得太靠右了,可往左拖曳,然后一定记得在报表编辑背景中的最右缘按鼠标往左拖以缩小报表编辑区域。

 

  切换面板可以集中存放各种报表,操作比较简单。但是主切换面板上只能放8个菜单,子切换面板上同样如此。更多的报表如果需要放在切换面板上,可以采用添加按钮的办法实现。

 

  各种控件的几个重要属性:数据源、名称、标题、控件提示文本、事件、无数据……

 

  无论多么害怕代码,做数据库不可避免地要接触到各种各样的代码,一不小心ACCESS就很不友好,报表代码中有错误,可仔细检查,再对照代码在报表、控件中的对象核实,不懂的话就查网络资料找到答案。过程非常辛苦,因为没有系统学过VBA编程。不过,解决问题之后的喜悦是非常难忘的。

 

  遇到技术问题时问别人,这是很好的,勤学好问嘛。可是90%的情况下会失望,因为一则很少有人在用ACCESS,二则你问的问题别人一般也答不上,或者不愿花时间帮你研究。因此,尽管要不停地问别人,可是“自己动手,丰衣足食”这句千年古训永远是铁的真理。并且,在自己动手动脑解决难题后,会有令人激动的成就感。另外,网上往往能找到比现实生活中水平更高也更乐于助人的朋友,因此善用多用网络会事半功倍。

 

  还有很多很多体会一时说不完。现在把我总结的一些技术细节放上来:

 

1、查询中加如下表达式,生成一个新的字段,表达式算出项目启动时间距查询当天的天数:
实施天数: Int(DateDiff("d",[启动时间],Now())+Int(Format(Now(),"mmdd")<Format([启动时间],"mmdd")))

 

2、报表中计算年数(在文本框中加入):=Format((DateDiff("d",[过去],Now())+Int(Format(Now(),"mmdd")<Format([过去],"mmdd")))/365,"standard")

 

3、报表中求切换面板上输入的2个日期之间相差的天数,加上千分位:
format(DateDiff("d",[Forms]![切换面板]![txtstartDate],[Forms]![切换面板]![txtEndDate]),"#,###")

 

4、采用自定义格式让数字变为货币符号:
=Format(21320.32143,"$#,##0.00[Green];($#,##0.00)[Red]")
输出结果:红色的$21,320.32

 

5、数字变百分数,乘以100并加上%:
=Format(0.13980143,"%#,##0.00;[Red]")

 

6、报表代码里的无数据事件:

Private Sub Report_NoData(Cancel As Integer)
    MsgBox "请点击上方空白框处日历图标输入日期...", vbExclamation, "No Records"
    Cancel = True
End Sub

 

7、从切换面板上取日期,且查询日期时往前退5年:

>=DateAdd("yyyy",-5,[forms]![切换面板]![txtstartDate]) And <=[forms]![切换面板]![txtEndDate]

>=[forms]![切换面板]![txtstartDate] And <=[forms]![切换面板]![txtEndDate]

 

8、距今年数:
=Format([实施天数]/365,"standard")

 

9、从切换面板上取日期,与查询表中的开始、结束日期进行比较,符合条件的显示出来,开始处放面板上的结束日期,结束处放开始日期:

  开始:<=[forms]![切换面板]![txtendDate]
  结束:>=[forms]![切换面板]![txtstartDate]

 

10、dateadd()函数如果调用切换面板上的日期时,则不能加双引号

 

11、可以在报表中加入复杂的运算表达式,其基本格式是:

 

="任何文本"&表达式&"文本"

 

  只要需要计算或者显示字段值的地方就必须写表达式,表达式必须放入2个“&”号之间,表达式多种多样,有字段计数类的,有日期运算类的,有数字运算类的,有数字格式化类的,有算合计值、平均值的……格式化时如果只想要千分位,可只加入"#,###"即可,如:

 

  format(sum([分配农户数]),"#,###")

  

  以下是我用的复杂表达式,实现报表最后把总计字段数值归纳成一小段话,以方便工作中直接复制到文章中去:


="  从1985年至" & Format(Now(),"yyyy年mm月dd日") & ",xxxxx项目总共实施了" & Count([项目编号]) & "个项目(含已经结束和正在进行的所有项目),这些项目共" & "扶持了" & Format((Sum([分配农户合计])+Sum([传递农户合计])),"#,###") & "户贫困农户,援助动物" & Format((Sum([分配动物合计])+Sum([传递动物合计])),"#,###") & "头(只),其中直接分配扶持了" & Format((Sum([分配农户合计])),"#,###") & "户,分配动物" & Format((Sum([分配动物合计])),"#,###") & "头(只);传递礼品畜禽共计" & Format((Sum([传递动物合计])),"#,###") & "头(只),扶持了" & Format((Sum([传递农户合计])),"#,###") & "户。共举办各类培训" & Format((Sum([培训期数合计])),"#,###") & "期,共培训" & Format((Sum([受训男合计])+Sum([受训女合计])),"#,###") & "人次,其中妇女" & Format((Sum([受训女合计])),"#,###") & "人,占总人数的" & Format((Sum([受训女合计])/(Sum([受训男合计])+Sum([受训女合计]))),"percent")


 

="  在" & Format([Forms]![切换面板]![txtstartDate],"yyyy年mm月dd日") & "到" & Format([Forms]![切换面板]![txtEndDate],"yyyy年mm月dd日") & "共计" & Format(DateDiff("d",[Forms]![切换面板]![txtstartDate],[Forms]![切换面板]![txtEndDate])/365,"standard") & "年(" & Format(DateDiff("d",[Forms]![切换面板]![txtstartDate],[Forms]![切换面板]![txtEndDate]),"#,###") & "天)内,xxxxx项目总共实施了" & Count([项目编号]) & "个项目(含已经结束和正在进行的所有项目),这些项目共" & "扶持了" & Format((Sum([分配农户合计])+Sum([传递农户合计])),"#,###") & "户贫困农户,援助动物" & Format((Sum([分配动物合计])+Sum([传递动物合计])),"#,###") & "头(只),其中直接分配扶持了" & Format((Sum([分配农户合计])),"#,###") & "户,分配动物" & Format((Sum([分配动物合计])),"#,###") & "头(只);传递礼品畜禽共计" & Format((Sum([传递动物合计])),"#,###") & "头(只),扶持了" & Format((Sum([传递农户合计])),"#,###") & "户。共举办各类培训" & Format((Sum([培训期数合计])),"#,###") & "期,共培训" & Format((Sum([受训男合计])+Sum([受训女合计])),"#,###") & "人次,其中妇女" & Format((Sum([受训女合计])),"#,###") & "人,占总人数的" & Format((Sum([受训女合计])/(Sum([受训男合计])+Sum([受训女合计]))),"percent")

 

  以上内容,对于不懂ACCESS的人来说也许像天书,但是对于用过ACCESS的人来说不过尔尔。没有什么技术难得我们永远无法掌握,也没有任何技术值得我们炫耀。技术的习得是一个机械过程,是不需要经过非常复杂的思考和阵痛的。可是,我渐渐感觉,人类思想领域却不是这样的,要想在思想领域取得进步,非得经过艰难甚至严酷的阵痛不可。

本文转自http://blog.sina.com.cn/s/blog_495f96e30100c3e9.html



Access软件网官方交流QQ群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助