我为什么不用Access了

  • 发布时间:2016年12月28日 16:13
  • 作者:杨仕航
  • 分类标签: 数据库
  • 阅读(1596)
  • 评论(2)

以前我在上一个东家工作的时候,主要用Access开发。但我离开那家公司之后,就再也没用过Access了。因为Access弊病太多,下面一一道来。


1、Access是什么

Access是Office其中一个组件。仅仅如此这样简单吗?错了,微软的东西从来不简单。

首先,Access是一款数据库软件,原生支持DAO组件。

它是一个小型桌面关系型数据库,桌面是指可以在桌面看到文件并可以直接打开。

另外,它隶属于Office,也支持vba开发。

看上去很强大。嗯,仅仅是看上去而已。实际则不然。


1)说是一款数据库呢,支持的SQL东西又太少。

有不少SQL语句不支持,例如row_id,limit等。对比SQL Server等,又没有存储过程等高级功能。


2)说是一款办公软件呢,很多办公人员用不上。

数据处理没Excel强,图表也没Excel多。顶多就是可以存储很多数据。所以你可以看到会有不少新手习惯用Excel的方法去使用Access。


3)说是一款开发工具呢,很多程序员不屑用这个来开发。

尽管支持vba,但vba这东西开发效率低,执行效率也不高。而且用好Access vba至少要懂得vb语法、Access对象模型和数据库设计等知识。

我现在开发东西,需要简单存储一些数据的话,基本使用xml或写入文本文件。若要使用Access,还要安装Access组件。

有些人只拿Access作为SQL Server的可视化工具去链接SQL Server的数据库。

不过,至少在国外有个好处,开发成本低。不用买太多软件或数据库只需买了Office就可以开发和使用了。但现在有MySQL等开源数据库和一些开源好用的开发工具,呵呵。


总之,微软本来想把它做成一条龙。东拼西凑,又定位模糊,结果拼成一条四不像的虫。

这几年,随着Office版本的更新可以看出。微软对Access进行调整,阉割了不少东西。Access看上去是被打入冷宫了。(好像也从来没上过台面)


2、Access文件容易变大

用过Access开发的人都知道,每隔一段时间都需要用Access菜单上的压缩修复数据库压缩文件。不要然整个Access文件会越用越大。有时候只是保存几条记录的数据,都有可能1G多的大小。

这个问题是Access本身的问题。它会记录各种各样的行为、数据等到自身的系统表中。

我以Access2010为例,把系统表显示出来。右键导航栏空白处,点击“导航选项”。如下设置:

20161228/20161228150138305.png

把这两个选项勾上,即可看到系统表。我再创建一个空白窗体,并打开MSysObjects表。

20161228/20161228150250567.png

可以看到这里已经记录了一些数据。然后,你再打开窗体、移动窗体、修改窗体内容等等。它都会把这些零零碎碎的数据记录起来。

还有,你删除数据库中的表。这些数据还是存在表中的。就算删除了,实际的Access文件大小没变。需要通过压缩修复,才真正清理掉这些数据。

日积月累,1个G的Access文件很常见。


3、Access文件容易损坏

经常使用Access开发的人会发现今天可以用,明天就出错了,分分钟砸电脑。

而且报错的提示也是莫名奇妙,大多是什么控件不支持什么事件。

如果经常用第三方控件,文件损坏的概率更大。

一般可以用压缩修复功能修复文件。如果修复不了,就基本废了。

20161228/20161228150521253.png

所以需要经常备份,而且Access是单文件。你写的代码越多,文件越大,越不利于维护。


4、SQL语句支持不全

确确的说,Access所支持的SQL语法是T-SQL语法。

T-SQL语法是微软自己捣鼓出来的东西,微软野心不小,总想开发自己的东西,拿下整个市场。到最后往往弄出一个四不像。

当然,至少Access的查询视图还是很实用。它可以让新手快速上手并学会SQL。

这里用SQL体会最深是开发分页功能的时候。若MySQL或SQL Server可以用limit或row_id解决。而Access完全不支持这些,只有简单的用法。

而且一个查询只能写一条SQL语句,不能用分号隔开写多条。


5、诡异的字段

Access这些版本我都使用过,最稳定的要数2010版,而且支持的功能最多。2013版就开始阉割。

但2010版可以看到这些字段:

20161228/20161228153130880.png

1)OLE字段:旧版本就有了。可以保存整个文件,也可以保存二进制数据。这个字段千万不要用。里面的数据很难获取使用,而且会导致文件大小剧增。

2)超链接字段:一点都不实用。作为Access开发,不会直接在表上直接操作数据。在窗体上,这个字段超链接点不着。果然是为办公人员准备的,汗。

3)附件:实际改字段是OLE字段改版,也存在OLE字段一样的问题。若使用了该字段会导致Access文件不能分离,也不会被其他Access文件导入链接表。

4)计算:这个字段估计也是打算给新手使用的。因为这个字段不应该在表中出现,用查询即可计算。而且该字段计算能力很弱。


6、弱编程支持

虽然Access支持vba,而且该vba比Excel、Word等的更为全面。但还是编程支持很弱。

很多第三方控件不能使用,一插入到窗体就崩溃。

只要涉及到内存操作的API,也很容易崩溃,甚至导致数据库损坏。

没有计时器,只能使用窗体的计时事件。(Access的事件可以动态绑定的,这点值得肯定)


另外,Access开发模式分3个流派:

1)宏,这个宏不是vba代码,主要是Docmd对象。

到后面的版本,宏进化比较完整。但多少用起来不是很方便。

2)绑定,Access的窗体可以直接绑定数据源。

通过绑定的控件直接操作数据。该方法开发最为便捷,但问题也是最多的。

3)纯ADO或DAO,使用ADO或DAO操作数据。

该方法可以避免绑定方法的弊病,就是代码量比较大。


不吐槽了。再吐槽下去,估计没人学了。大部分问题都是使用Access vba开发才会出现的问题。若只是将Access纯粹当作数据库使用,就不会出现文件损坏等问题。

简单来说,程序员不喜欢用Access,有更专业的选择。Access适合有点编程基础的办公人员。

我之前开发过一个Access开发框架:Access通用开发平台有兴趣有工作需要的可以试试。

上一篇:《机器学习实战》学习前言

下一篇:VSTO中Excel数字和列名相互转换

评论列表

智慧如你,不想发表一下意见吗?

新的评论

清空

猜你喜欢

  • 猜测中,请稍等...