屌丝的Access数据库自学之路

【屌丝的Access数据库自学之路】分享给互联网技能从业者学习和参考。

我的职业路径

2008年回国开始正式工作,就职于某大型央企,开始是在央企下属的一家上游企业工作了4年多,其中采购做了两年多,忙得要死,后来不管采购,改做机关业务,相当于赋闲两年,期间自学了俄语。

后工作调动,派到一家外企做采购监督,驻外两年,然后脱产培训两年后进入某大型央企销售分公司,做销售和市场研究至今。

我十年职业之路实在没什么好吹的,过于平淡无奇。但不得不说,我是个“异类”。

我们知道,有很多理工科生转文科专业,但很少有文科生转理工。比如冯唐就是医学博士转写作,理转文多,但文转理很少,尤其是工作了将近十年之后,开始自学计算机的更是少之又少,至少我没怎么听说过。我就是其中的一个。

我自学计算机是由于各种机缘巧合、阴差阳错。无论如何,我现在对于Access数据库和VB相关知识非常的痴迷,也尝试了自己进行一些VB知识的学习,买了很多的计算机编程方面的书。

客观的说,我花在自学计算机上的时间并不多,学得很皮毛,稍微吹一些牛,也只敢说自己会了一些Access方面的知识,常用的SQL还知道,能独立设计小型数据库,Access基本查询功能掌握了一些,遇到Access技术问题心里不慌,知道去哪里找轮子,常用的Access功能还比较熟悉。

不管以后我做什么,编程已经成为了我的大爱好,现在一大爱好是每天在家没事都要摆弄一下自己的数据库,看看有没有什么可添加的元素,看一看相关的书籍。是一种消遣。

Access学习的好处1

Access敲开了我打开计算机科学的大门,让我看到了一个精彩纷呈的世界。

我一直坚信:自己的命运需要自己来掌握。常言道求人不如求己,自己根据需要,开发自己觉得好用的软件,顺便还能装一装B。这种感觉很好。

此外,工作久了容易产生倦怠感,尤其在很多东西一成不变的传统企业工作,这种倦怠感更为强烈。

而计算机编程和Access数据库学习,极大地激发了我本已倦怠的斗志和活力,让我每天的工作都充满激情。

我设计的销售运行界面

Access学习的好处2

现在单位用的ERP软件是超牛大公司做的,但是不能结合在我的日常工作之中。据说使用体验也不怎么好。

再好的跑车,我不会开,或者根本不给我开,有没有车又有什么区别呢?

与其望着跑车眼馋,还不如自己造车造轮子,虽然没有跑车性能优异,拉个脚带个步总还够用。

Access很难吗?

做一顿饭和做个Access数据库,哪个难?我觉得还是做个饭难。现在我做一个小Access应用的时间比做饭时间差不多。我做一顿饭经常还没开席,先做的菜就凉了。但是搭建一个小的Access一共也用不了几个小时。

为什么要力推Access?

从2008年上班至今,我发现身边的同事有个特点,那就是我没见过一个人不用Excel工作,但也没见过谁会用Access协助自己的工作。

Access是优秀的小型数据库,我觉得是我见过的最好用的Office软件,功能齐全而强大。对于日常工作,人事、财务、营销,凡是和数据打交道的岗位,Access都能提供很强大的帮助。

我给本部门开发的管理小界面,在公司引起一阵赞叹

我学习Access的路径

1.从Excel开始

2016年的时候,遇到了数据处理的问题,当时每天要处理几十条交易数据,每周五进行汇总整理,汇报给上级。

当时的工作说实话不难,没有什么特别的要求,压力也没有那么大,但我这个人比较不安分。工作喜欢一些新的挑战,比如第一个单位的时候,前两年很忙,后两年很闲,就利用了空闲时间自学了俄语,还学了一些高等数学。

随着现有数据统计工作的进行,我发现Excel的功能比起我刚刚参加工作的时候增加了很多,我刚上班的时候是2007版的Excel,后来Excel增加了PowerMap、Query等强大的功能。因此我结合数据处理问题,不停的挖掘Excel的各项功能。可以说发现了另一个兴趣点。

为什么要先讲Excel呢?因为回顾我的Office学习路径,我的Excel知识对于我学习Access是一个先决条件,就我个人的经历而言,我是在把Excel的一些常用功能挖的比较深之后,很多问题解决不了之后才学习Access。因此我是带着很好的Excel基础和问题才学习Access。

我学习Excel函数,大概用了6个多月的时间,一些基础函数,比如If函数,Sumproduct函数用的还比较熟练。知道怎么用函数方法解决一些统计问题。

但是现在看来,用Excel函数解决数据统计问题的思路是不对的,或者说是非常的低效。我那些方法不仅很笨,而且很难用。我记得我汇总月统计报表是用的单元格的等号函数链接,链接得乱七八糟,刷新都要好久,维护起来也麻烦的要命。现在想起来简直不要太蠢。

但当时我的技术能力很有限,不仅不觉得自己蠢,还经常沾沾自喜,把自己的蹩脚成果给同事展示。而同事们的技术能力有限,也觉得我比较牛。因此自己有一些飘飘然了。

2.认识到Excel的局限

我对Excel的局限认识过程也有一个过程,Excel的特点是数据分析,我一直以来拿他当计算器、报表、数据库用,对他的局限性理解不到位。后来由于偶然的机会,出去开会,认识了一个搞管道技术的同事,给我指点了一下,并且给我看了一下他做的的Excel表格,我才恍然大悟Excel的重要核心功能实际是数据透视表,而不是函数。

这个如果不同意可以保留意见,至少目前在我的技术栈里,Excel差不多可以和数据透视表划等号。数据透视表是非常好的数据分析工具,解决了我当时的90%的统计问题。

除此之外Excel还有一些比较好的小插件,比如PowerMap、Datamap等地图插件。

但数据透视表有他的局限:

(1)时间查询功能不强。切片器难用也难看。

(2)十几万条数据查询太慢。

(3)扩展性为零。Power Pivot虽然已经开放,但我现在也没有什么兴趣去学习,我觉得太局限了。

因此我的Excel学习遇到了很大的瓶颈,在日常工作中,我遇到了一些具体的问题解决不了。

比如我想计算每天日汇总气量,并且将日汇总作为新的一行加在用气量后面,便于计算每个客户每日销量的日占比。

Excel根本实现不了这个功能。或者说很麻烦。

3.Access的计算功能,Excel很难望其项背

如何利用好Access网络学习资源,我的一些体会

回顾起来,我学习Access开发,其实还是主要靠自学,在实践中学习一些基本的设计和代码,了解什么是过程,知道一些VBA简单的语言,然后学以致用,多去锻炼。

我经常去专业的Access网站,但对我的帮助应该说没有很大,一些轮子并不成熟,基本没办法拿来直接用,而且很多文章很老,代码还不支持64位操作系统。有的轮子我光测试的时间都比自己看书写一个时间要久了。

我主要的学习还是看Office给提供的一些函数解释,并不停的尝试这些函数。有些函数看着简单,用起来可一点都不简单。

有些代码比如SetFocus,原理简单,看着也简单,但它如果要发挥作用,要配合Me.Refresh或者Me.*.Requery使用,顺序还不能反。这个技巧如果不自己去体会,不真正的踩几个坑,光靠网络论坛搜索,是很难掌握的。

网络论坛上解决Access的问题,在我看来主要还是“有无”的问题。解释起来就是我本来是要解决A问题,所以去论坛上找相关问题,结果找着找着A问题答案没找到,却发现了B问题的解决方案,自己恍然大悟,奥,原来VB还有这个功能我不知道。

找着找着,你就发现,原来自己的A问题提得就有问题,不是不能实现,而是有更好更便捷的解决方式。Access论坛能做的是能告诉你什么可以做,可以起到技术通报的功能,而具体怎么做,还是需要自己来摸索。

Access的技术虽相对简单,但也需要不断学习和升级

以我为例,很多的时候会发现自己之前做的数据库过于复杂。明明可以用更简便的方式实现,自己当时偏偏用复杂的方式。

造成这种情况,我认为是正常的。一个Access软件必须首先能用,其次才是性能优化,性能优化也需要过程。

开发者的技术水平需要逐渐提高,但最重要的还不是技术问题,我认为造成大量困扰的恰恰是技术过高,没有完全掌握,造成维护扩展不易。本质困扰还是自己的需求没有理清楚,或者自己的需求过高,或者干脆就是由于需求不准确造成的。

因此,我认为开发者应当花大力气进行需求的挖掘,其次是对Access整体性能和函数的了解,最后才是具体的技术细节。正如上文所说,知道要干什么、能干什么,比知道怎么干要重要多了。

Access帮我解决的问题

(1)数据管理界面友好

一个难看的表,是激不起我使用和分析的兴趣的。而要进行有效的数据管理,设计一个好看好用的前端界面,我认为是必须的。

数据库必须既好看又好用,并不是能用就行!我虽然是个屌丝数据库开发者,也明白这个道理。必须花力气在界面美化上。

不要忘了数据库是要给人用的。尤其是我们公司,平均年龄很大。我发现很多40岁以上的同事,眼睛很早就开始花了。过小的字体,会产生阅读困难。

我有一次欣喜的给一个同事展示我的数据库作品,发现他观看的神情出现了痛苦的表情。我才发现老花眼是个很痛苦的事情。

从那以后,我给公司设计的所有数据库字体都采用了“方正新报宋简体”20号左右,这个字体属于大字型,我总结来属于“满格逛”。有人看着可能没那么美观,但我觉得很好很舒服,不需要费力去辨认。

Access给我提供了很方便的修改界面。这是Access巨大的优势,它将修改前端的代码成本降低为零。
 

(2)数据录入界面友好

Access还有一个经常被忽略的优势,那就是它的录入功能比较人性化。

什么叫人性化?我理解就是用正常人的方式来做事,而不是用其他的、非人类的方式来做事,比如说用Excel来录入数据,经常就是这样一个画面:

为了达到录入信息完整的目的,很多Excel使用者会设定十几个甚至几十个字段,这样做的后果是表格最后的效果肯定是“一字长蛇阵”,得向右拉很久很久才能“走到头”。我见过最多的Excel列数达到了100多列~这岂止是非人性化,简直就是Excel使用方式的泥石流。

每次我见到这种表,总感觉毛骨悚然。这种“一字长蛇表”,不仅不容易看,也很难纠错。把字体变大吧,往右拉动的时间会更多。

好在我还掌握了一些Access,不用一直过这种毛骨悚然的日子。Access有很简便的录入方式,可以将几十上百列的字段,用报表的方式排列,填写这些字段的感觉就像在填写一份简历表格。虽然一次录入上百个字段也挺累的,但总比“泥石流”的数据录入方式要好多了。

如果字段太多,还可以利用Access自带的“选项卡控件”,把一页放不下的字段分成两页、三页,把所有的字段分门别类划成几个大类。既容易看、也容易用。

试想我们平日里,肯定做过一些注册的活动,比如注册个知乎、注册个豆瓣,都会输入自己的相关个人信息。所以窗体录入的一些元素设计灵感不难得到。

我现在使用Access的一大便利之处就是输入数据比之前方便多了,也人性化多了。每次维护客户信息,对我来说都变成一项正常工作,而不是面对“泥石流”的痛苦回忆。

这种通过窗体进行数据维护是Access比较容易实现的功能。

插入段:

突然想起一个事,那就是Excel的设计感问题,我一直认为,Excel的本表没有任何必要进行过度的美化,数据透视表有美化的必要,但是也不要搞得太过分。需要美化的是Access的窗体,因为窗体才是专门用来和我们进行绝大多数时间交互的,把窗体做的漂亮一点没坏处。

我就被这种美化坑过。在我给我们公司录入营销数据的时候,我收集来的是一大堆乱七八糟被各种合并居中的表,把我搞的十分不爽。为了美化单元格,人名两个字中间非加几个空格。这种Excel使用方式,我认为严重违背了数据分析原则。

还有一些领导,比较自负,经常会做一些泥石流级别的烂表还不自知。这些一堆合并单元格的表,叫垃圾并不过分。数据表如果还有什么二次使用价值的话,严格的数据规范必不可少。垃圾表格被称为垃圾并不过分,因为只有一次性的使用价值。

有一次一个领导为了显示自己多么“身先士卒”,给我派数据统计活的时候,还给我做了个“示范”表。他自己觉得自己Excel功夫了得,给我做好了“模板”,让我跟着“填数”就行了,他自己肯定觉得自己多么“体恤下属”、多么“身先士卒”。

我打开这张表,原本并不花的眼睛立刻就花了,大大的标题,蓝底黑字,合并单元格这种“传统”不在话下,各种字段没经过思考就一股脑的堆砌在表上。看着这种烂表,我是填还是不填?

(3)查询功能友好

Access 的核心是表,输出端是窗体,而查询居于二者中间,起到了非常强的中间桥梁作用。查询功能是整个Access系统的脊梁骨,是支柱,正因为查询的存在,Access的表这种东西才能灵活多变、为我所用,否则,Access只能是一种更难用的Excel而已。

在实际的数据管理过程中,经常会需要进行一维表和二维表之间的变换问题。Excel的数据透视表可以完成二维转一维,但不容易完成一维转二维。Access可以在二者之间进行舒服一些的变换,只要使用交叉查询功能就OK了。

Excel也可以利用函数进行查询,但是会非常复杂,一旦查询条件高于两个,要进行简便一些的查询,接近于不可能。我在这一点上走过不少弯路,后来还试图借助于数据透视表的切片器方式,但也很笨,解决不了多大问题。

这时Access就可以站出来了,多条件查询是Access这么牛的一大原因。尤其是数据量一旦超过10万条,字段超过5个,查询一次,Excel直接就会挂掉。而在相同条件下,Access查询差不多只需要1秒多钟,系统不会死。

当然1秒多的查询时间,还是不能让我满意,Access的功能肯定也不如MySQL这些专业数据库更为快捷完善,但它至少给我们的工作提供了一些选择,能解决有无的问题。

Access还能实现多级联动查询,多少个查询条件都不怕。打个比方,要查询“宋江”这个人,就可以一级一级的设定查询条件:第一个条件可以是“中国”,第二个条件是“宋朝”,第三个条件是“山东省”,第四个条件是“郓城县”,第五个条件是“县一级领导干部”,最后的选择框中有“宋江”的名字。

多级联动查询我研究过很久,用查询窗体、VB的方式都试验过,但每种方法都有利弊。VB的方法太复杂,语句不容易掌握和维护,查询窗体会导致太多的窗体存在。最好的方法就是将数据表镶嵌窗体中,再用内置查询的方法。这个技术tip我会在以后专门讲。

接下来预告:

Access学习应有的思路

(1)踩坑是常态、调试是大头

(2)三个层面发展自己的技术
 

踩坑是常态、调试是大头

正如前文所说,Access的技术,即便最简单的一个SetFocus函数,也不是轻轻松松说用就用的。要把一个函数用对,平均花费的时间可能要几个小时,要查很多次百度,而且必须亲自动手敲一遍代码,一个字一个字的敲,不能复制粘贴,至少要自己写个五六遍。

即便如此,踩坑也是常态。可以说踩坑是必不可少的开发阶段。

举个例子。以SetFocus为例,是个很小的函数,但及时即使自己已经多次使用、并已经熟悉了SetFocus这个小的不能再小的轮子,知道Text1.SetFocus能让Text窗格被选中,实际用的时候,也会经常出错,或者忘掉用法和语法。这是非常正常的现象。

永远不要说编程是一个简单的任务,永远、永远。

所以那些动辄能编几百上千行,还不怎么出错的程序员,是真真正正的大牛。我经常想,这些十几年严格训练的程序员,得踩多少坑,经历多少痛苦和折磨才能有今天的一些成果啊。

更不要说能造轮子的那些程序员,我觉得没下过基本功的,连轮子的边可能都摸不到,连最基本的语句可能都写不好,最简单的函数可能都用不明白。

我其实有代码恐惧症,尤其是超过三行的VB代码,我如果看不懂,就不敢轻易用。因为不会维护代码,是会发生糟糕的后果的。

我现在开发的Access,所有代码可以不吹牛的说,我知道怎么用怎么写,虽然有时候一个模块一个窗体只有一行代码,我也可以骄傲地说,我掌握这个用法,会调试。

我还坚持因陋就简的原则,如果一行代码我能看懂,但不明白原理,我就不会去用。因为Access VBA里一定会有更简便的一目了然的方法,如果没有,果断放弃这个功能也不一定是差选择。

VB的技术没有简单和复杂之分,最好的方法是用Access自带的函数来编程,这些函数都是微软大牛们几十年来积累的成果,远比我们想象的更成熟更稳定。Access软件的目的就是告诉我们我有什么VB轮子,教你怎么用,我觉得并不是鼓励我们搞什么独创。

因此我在论坛上看到过很复杂的代码,有的也能看懂,但真的不会轻易去用。复杂不代表牛逼。

我觉得下一步我的学习方法路径非常清晰简单:一个一个的学习Access手册上给的函数,搞清楚看明白。

我再强调一下,我的职业是客户经理和研究员,并不是个码农。但我也建议码农多学轮子少造轮子。

三行简洁好用的代码,远远超过三十行难看可能功能还强的代码。这是Access开发的原则。

要真正的理解代码,而且动手写三遍,每个字符都要能解释是什么意思,为什么这么用?为什么这个顺序?能不能再简单点?

编程最忌讳觉得自己low自己简单,没有low的技术只有low的人。搞好一个Access数据库,出了Bug不会维护才是真low真简单。

我现在自己做的数据库,除了刚开始做的几个数据库,没有掌握最简原则,有些代码不会维护,后来做的数据库大多都遵循了“傻瓜原则”。所有代码我都能控制能掌握。

下面再来说说Access数据库的调试

我个人强烈建议多用外行帮助调试提意见,我那个关于字体大小的问题,就是因为同事老花眼看不清发现的,现在大字体已经成为了我的开发原则。

Access的导航栏不能忽略,最好把表、窗体、报表、查询都按照严格的命名规范命名好,然后放到命名好的导航栏里面。

完成一个窗体,就要调试好,不能堆一大堆窗体再调试。调试也要遵循傻瓜原则,从登陆开始就调试,用比较苛刻的使用习惯折腾你自己的产品。

谈点个人体会,其实调试很重要,很多创意都在调试过程中产生,调试过程也很惬意,美化、优化这种感觉是不错的。可以把调试的界面用视频录下来,发给别人一起帮着调试。也可以发到朋友圈,刷一波赞和关注。

Access毕竟是个入门级的数据库,从它被归为Office大礼包中就能看出来。用它设计出来的软件,需要调试的时间并不长,但是也不能忽略调试。

Access性能优化

我第一个Access作品,是给公司设计营销数据库。这第一个作品还不是很成熟,很多我后来掌握的基本理念还没有在这个数据库中体现。

这个数据库大概录入了15万条左右的营销数据,字段有4个。前后开发用了一个多月的时间,随着功能不断增多,数据量不断增大,我发现了数据库存在很多的问题:

(1)图片过大

由于不了解Access数据库的一些基本性能,我在插入图片的时候没有考虑图片的大小。每次打开数据库,图片都会一闪一闪的。

(2)查询较慢

15万条数据,查询的设计比较原始,没有考虑到性能问题,打开查询界面需要半分钟,查一次的速度也慢的惨不忍睹。

(3)内容过多

数据库加了很多非核心的模块,导致数据库过大,导致下载和分发不易,增加了不必要的浪费。

如何利用好Access的强大功能,是需要仔细斟酌好好权衡的。根据我的经验,我不太建议把Access做成大而全的数据库,更希望把它做成小而精的数据库。每个数据库的表不宜过多,越少越好。如果两张表并不属于一项业务,尽量不要放在一个数据库里。

这就好比一个Excel文件,尽量不要用太多的Sheet,否则看着累、用着也不方便,更严重的是,会严重拖累数据查询的速度,影响使用体验。
 


屌丝的Access数据库自学之路