2014年9月,delphi xe7 出来了,这次在数据库技术方面,彻底抛掉了从1995 年delphi 1.0 就自带的BDE(Borland Database Engine)数据库访问技术。从而宣告了这个持续
了20余年的delphi 访问数据库技术进入历史。 纵观delphi 数据库技术的20年发展史,其实也是delphi 的发展史。通过数据库技术的变化,也可以了解delphi的发展历史及未来的方向。
一、 话说当初
Delphi 1.0 是16 位的编译器,当时的互联网几乎是不存在,拿到的第一份delphi 1.0 是那种软件集合光盘(你懂得),在486的win95 上好长时间,才安装好,安装界面是borland
经典的赛车仪表盘窗口。装完以后,就进入了拖拽控件的设计界面,配套的数据库技术就是BDE,BDE(Borland Database Engine)是borland公司的数据库引擎,它结合了SQL Links允许程序员
通过它能够连接到各种不同的数据库(例如oralce,sybase,sql server等)。最早的 BDE是给Paradox 用的,后来borland 把paradox 卖了,保留了BDE,在delphi 里面就直接使用BDE
作为访问数据库的技术。由于当时真正的数据库服务器还很少,所以开发的数据库还是以本地为主,数据库为Paradox.由于当时BDE支持paradox 没有中文语言支持,中文出现的是乱码,很是麻烦,
经过多次实验,终于发现使用泰国语言支持可以显示中文(当年中文支持几乎是所有计算机系统头疼的事).
Delphi 2.0 使delphi 进入了32位的世界,而且明确的提出了C/S 的概念。BDE 也正式换成了32位的,使用BDE 可以顺利的连接访问oracle 和 sql server 数据库服务器。彻底进入C/S 时代,脱离了
单机桌面时代,看到oracle 7.0 数据能够显示到dbgrid 里面,并能够删改,简直兴奋死了。 在delphi 1.0 和delphi 2.0 时代,基本上没有成熟的第三方的数据库技术,属于BDE 垄断的时代。
二、群雄逐鹿
1997 年,Delphi 3.0 的推出,大大稳固了Delphi 的市场地位,已经与比他出来更早的VB,PB 并驾齐驱了。在Delphi 3.0 中,borland 已经提出了多层的概念及实现方式,而当时C/S 基本上还是完全垄断数据库
市场,经过了好多年,多层技术才被众多的开发者接受,可见当时borland 的牛人多厉害。
delphi 3.0 出来后,delphi 的数据库访问技术在第三方的支持下,出现了百花齐放,主要有三种形式。
一种是类似BDE 的,直接支持后台数据库服务器的访问,有支持多种数据库的SQLDirect,zeoslib等,还有支持单一数据库的,例如ODAC、DOA等。这些直接使用原生代码实现数据库API ,然后访问数据库服务器。
第二种是类似后来的 ADOEXPRESS, 通过封装ODBC、 ADO等微软数据访问技术数据库服务器,典型代表就是ODBC Express。这两种与BDE 最大的不同就是程序分发时不在安装BDE, 只要安装了数据库的客户端就可以了,
减少了程序配置的麻烦。
第三种就是自己实现数据库,用delphi 自己开发一套完整的数据库系统,既可以直接把数据库功能集成到程序里面,也可以分成客户端与服务器端使用。这一类典型的代表就是Elevatesoft's DBISAM
和TurboPower's FlashFiler ,还有Nexus Database Systems NexusDB。这些既实现了C/S 架构,也不用购买昂贵的数据库服务器。非常适合对于中小企业的应用。
这些第三方数据库技术各个都有自己的买点。开发者选择的也很多,有时为了集成一些项目,甚至在一个IDE上会装上超过5种以上的数据库访问技术。
三、危机四伏
随着delphi 4.0 的仓促推出而失败,delphi 5重新夺回过去的辉煌,同时编译器增加了很多新的功能,BDE 也在微小更新,第三方数据库访问技术随着时间的发展,技术也越来越成熟。同时服务端的数据库技术也在突飞猛进,
oracle 推出了8i,微软也出了sql server 2000,BDE 却没有大的更新,已经有了昨日黄花之感。
同时BDE的第一次内部危机也随之而来,Borland 要在delphi 6 中加入Linux 的支持,而BDE 是只能支持WINDOWS的,那么要在delphi 中支持Linux 数据库的访问,BDE是不能用了。于是borland 开发了同时支持windows 和linux 的
DBEXPRESS.同时为了提高多层应用,DBEXPRESS 特意处理了很多多层上问题,与三层技术结合起来,叫了一个非常牛的名字datasnap。准备做一个企业级的多层中间件。dbexpress 的推出,已经提前宣布了BDE 的命运。
delphi 7.0 的推出,把delphi推到了历史上的最高点,盛极必衰。borland内部开始发生动荡,很多人纷纷离去,支持linux 的kylix 没有大卖,使得delphi 又回到微软的阵营,
先推出了一个历史上最烂的delphi 8 for NET(没有之一),接着推出了历史第二烂的delphi 2005,导致delphi 的水平过了好几年还维持在delphi 7.0 的水平,错失了市场,
错失了时机,delphi 开始衰败。broalnd 内部继续动荡,也没有太多精力把DBEXPRESS 的技术提高,使得BDE 没有被完全踢出delphi. 当然了BDE 自己也没有任何变化。
delphi业务自己也被borland 分理出来,搞了一个叫codegear 的部门,伺机叫卖。在这期间出了delphi 2006 和delphi 2007,这两个版本除了IDE 的变化外,
还是基本上炒delphi 7 的冷饭,连最基本的unicode 都没有加入支持。
易博龙在delphi 历史最低价的时候出手了,以非常便宜的价格购得了borland 的delphi 及其他开发工具业务。推出了第一个支持unicode 的 delphi版本 delphi 2009(当然是bug 满天飞)。
紧接着就是dephi 2010,delphi xe. 这几个版本主要是就是unicode 的稳定版,数据库技术这一块除了支持unicode 外,也没有大的变化。
四、双雄争霸
delphi xe2 出来后,虽然开始正式支持WIN64 和mac osx了,但是时不我待,机会已经错过,delphi 的市场已经大幅萎缩,很多第三方数据库技术要么就是停止更新,
要么就是简单的维护,不再做大幅度的更新。数据库服务器访问控件一直更新的基本上就剩devart 的unidac 和da-soft的anydac.
其实很有意思,这两个公司的数据库访问控件都是从oracle 数据库访问做起的,devart 的第一个数据库访问控件叫ODAC。da-soft 的第一个数据库访问控件叫NCOCI8,
而且免费的。接着开发出来freedac 也是免费的,后来又推出来商业版的的anydac.而且还在RTC 公司支持下,开发了一个简单的三层数据库访问框架--Thindac。
后来remobjects 公司看上了anydac , 就把anydac 收入旗下,与自己的拳头产品Data Abstract搭配起来买。后来可能是由于产品发展的方向不一致,
anydac 经过不到三年时间,又从remobjects 公司独立出来了。
delphi xe2,xe3,xe4 主要任务是跨平台,开始支持win64,并通过Firemokey 开始支持mac osx,ios。 虽然有一些小的毛病,但是产品质量已经大大提高.firemonkey 也在不断地优化。
当然了,那个 BDE 虽然基本上没人用,还是在那里呆着,作为标准配置,每次 Delphi 安装时,都被默默的安装到硬盘上。
在所有的第三方数据库控件中,只有unidac 和anydac 及时的更新,快速支持firemonkey,并支持delphi最新的跨平台应用。
因此这一阶段的第三方数据库支持,就剩下这两个开始争霸。这两个各有优缺点,功能也各有千秋。有时确实难分伯仲。
大体上是unidac 支持后台数据库自身功能强点。而anydac 是客户端数据操作功能更完善,更强。
五、王者能否归来?
随着delphi xe5 的发布,发生一件令人瞠目结舌的事情,delphi xe5 直接把anydac 集成进去了,原来易博龙已经在delphi xe4 时已经把anydac 收入旗下,
命名为 firedac. 随着xe5 正式发布。至此,支持多平台的第三方数据库控件就只剩下了unidac 为主力军。
随着delphi 半年一个新版本的快速更新,从今年4月份的 Delphi xe6 到今年的9月发布的delphi xe7,
firedac已经融入了Delphi的血脉之中,不但是作为一个数据库访问层,而且在datasnap 中起了举足轻重的作用,
使用TFDMemTable开始了替换苍老的、众人诟病的 Tclinetdataset 的进程,并在最新的 Enterprise Mobility Services (EMS)
的客户端扮演重要角色。这样 BDE 终于被送进历史的博物馆,结束了20余年的生涯(默哀,一路走好)。
由于firedac 被delphi 直接集成,成了免费的,这样有了delphi就可以直接使用firedac。而且性能与unidac 相近,
很多程序员会直接选择firedac 作为数据库访问层,并开始放弃unidac。 这种情况下,会不会造成unidac 的没落?
这一点个人认为应该不会的,竞争是暂时的,长远来看,更多是双赢:
1.firedac 的更新是随着delphi 版本发布的,也就是说firedac 的新功能只有最新版本delphi 才能使用,
而unidac 支持从d5 到xe7 所有版本,你不用升级delphi 就可以访问最新的数据库功能(好像现在用d7 的人不在少数)。
因此,unidac虽然收费,但是使用面会更宽一点。
2.unidac也有很多功能点是独一无二的(例如无客户端访问oracle数据库),对于一些有这种要求的客户还是会继续 留在unidac 上的。
同时由于 firedac 是免费的,那么为了竞争,unidac 也会加快开发,增加更多功能,对我们来说 其实也是好事。
在这一点上,没了unidac, 其实对于开发者来说没有任何好处。
3.作为两大跨平台的数据库访问控件,他们的对手不是彼此,而应该是delphi 以外的企业开发市场,如何利用各自的技术优势
把delphi 的市场做大?让delphi 能够提供更多的功能,支持更多的新兴技术,吸引更多的开发者进来。有了市场, 盘子大了,
随便哪一个都会有更多的用户使用,还害怕什么,delphi 3-delphi7 时代就是很好的例子。
4.firedac 与unidac 更应该发挥各自的优点,加强合作。利用firedac 的优势,加强Delphi的datasnap,提高稳定性,增强
更多新的功能(现在已经加强了REST 的支持),提供一个稳定的强大的企业级的中间层。而unidac 也可以利用自身的优势,
提供对新的数据库功能及特性的支持(例如oracle 12c,sql server 2017), 乃至提供对nosql 数据库的支持,
来加强 delphi 企业级开发的优势。如果把两者的优势结合起来,就可以开发出功能强大又支持各种新技术的企业级的数据库应用。
让delphi 走向辉煌,重回王者之位。
不破不立,旧的不去,新的不来,BDE 走了,firedac 来了,新的delphi 携带着多平台开发也来了,你准备好了没?
备注:1、由于本人年纪已老,记忆力下退,文中很多东西都是按记忆写的,可能年代和名称会有错误,欢迎指出;
2、由于本人年纪已老,思维僵化,如果你认为我的观点不对的地方,就不要指出了,指出我也不改。
2019.10 补记:
unidac 如我所猜开始支持多种云端数据库的支持,同时sql server 也实现了无驱直连访问。
dbexpress 也成为昨日黄花,落入尘埃。