这段代码访问了Table
中当前记录的名为Last Name的字段
该字段的类型为String
事实上DataAware构件就是通过访问DataSet构件的Fields属性来使用数据的弄明白了这一点之后你自己也可以尝试改写一个常规的显示构件使之具有DataAware的性质其实大多数使用Delphi的数据库高手并不喜欢使用DataAware构件因为DataAware构件远不用常规的构件来得灵活DataSet构件除了Fields属性之外还具有数目众多的特殊属性方法和事件足以应付从小型文本数据库到大型网络数据库的所有应用本文不拟一一讨论它们如果读者能将它们的运用烂熟于心的话可以说应付数据库编程就不会有多大问题了
请将注意力再次集中到上面的结构在上面的结构的最后一环可以看到BDE连接到了具体的数据库其实在这一环中也是有几个层次的理论上来说BDE可以连接任何类型的数据库对于一些比较简单的数据库例如ASCII(纯文本型的数据库)dBase以及Delphi自己的ParadoxBDE可以直接访问另外它也可以通过一些相应的驱动访问特定的数据库例如通过DAO访问Access数据库对于不能直接支持的数据库BDE还可以连接到ODBC通过ODBC进行访问虽然这样效率比较低
这种性质决定了BDE是一个相当庞大的东西使用了BDE的Delphi程序必须有BDE才能工作所以必须同BDE一起发布这样往往造成这样一种情况只有几百K的应用程序在将整个BDE加入之后体积将近M!这对于以轻薄短小为长的文件型数据库简直是一个致命的弱点而且由于BDE要兼容太多的数据库本身也有不稳定的毛病往往出现令人头疼的问题同时通过安装程序安装BDE驱动和设置数据库别名也是一件很麻烦的事情这一切使得BDE在Delphi程序员中很不受欢迎在网上的Delphi技术论坛里经常可以看到对BDE的一片咒骂之声……那么有什么办法可以绕过BDE吗?
有的目前来说至少有以下三种方法
() 使用第三方构件
Inprise自己也很早就意识到了BDE的问题虽然他们不肯放弃BDE但是从Delphi起仍然对程序员提供了一个不错的选择创建自定义的DataSet构件Delphi的开发者们把所有有关BDE的东西从TDataSet类中移走放入了新的TBDEDataSet类(TBDEDataSet类是TDataSet类的子类)TDataSet类被重新构造其核心功能被虚拟化因此你只需要从TDataSet类派生一个自己的新类并重载一些指定的虚拟方法(用以访问具体的数据库)你就可以得到一个自己的DataSet构件它与BDE完全无关但可以象Delphi自己的DataSet构件一样被使用例如访问其Fields属性乃至与Delphi的DataAware构件一起工作!
于是出现了大量的第三方构件它们可以访问某种特定的数据库下面是一些比较常见的访问文件型数据库或ODBC的第三方构件
Diamond 支持的数据库类型Access
Halcyon支持的数据库类型 DBase/Foxpro
Apollo 支持的数据库类型 DBase/Foxpro
mODBC 支持的数据库类型 任何ODBC数据库
ODBC Express 支持的数据库类型 任何ODBC数据库
这些控件被广泛使用在国内就作者所知财智家庭理财软件使用了Diamond而追捕(一个显示指定IP的地址位置的共享软件)使用了Halcyon在使用这些第三方构件之后软件终于可以轻装上阵再也不用为BDE头疼了
() 使用ADO
在Delphi中Inprise终于提供了一个比较彻底的解决方法那就是ADO构件从原理上来说ADO与上述的第三方构件并无多大区别只是它是Inprise官方开发的同时它连接的不是某个具体的数据库而是微软提供的ADO对象
ADO(ActiveX DataObjectActiveX数据对象)是微软提出的新标准从理论上来能够支持任何类型的数据库(甚至包括流式数据)微软力图将它树为新的统一数据库接口吹嘘了它的许多优点Inprise一直是微软不共戴天的竞争对手对微软的标准嗤之以鼻(BDE即是一例)但是由于种种原因Inprise终于承认了ADO平心而论用ADO来取代BDE的确是一个不错的解决方案而且在Delphi中使用ADO也相当方便从形势看ADO应该是未来的方向但是ADO本身也是相当大的
() 从最底层开发一个完整的数据库引擎
这是最彻底的办法彻底抛弃Delphi的数据库支持从字节开始开发自己的数据库这种方法有其好处第一不用考虑兼容性问题例如不用去考虑用户的数据库文件是Access格式还是Access格式的第二可以在性能上达到最充分的优化因为不需要通过任何通用接口而是直接对磁盘文件进行操作这对于一些对性能要求苛刻的程序是很有用的第三能够最大限度地减少冗余代码因为这种数据库往往是特定格式的而且只需要执行一些特定的操作访问代码当然要比通用数据库精简得多但这种方法的负面问题也显而易见那就是庞大的工作量再简单的数据库也是相当复杂的从最底层实现一个完整的数据库引擎往往需要几千行代码以及耐心和经验
虽然听起来有些极端但这样做的也不乏其人着名的Foxmail就是使用了自定义的数据库格式来储存信件地址本等有关信息另一个共享软件电子书库也使用了自定义的srm格式作者开发的iCompanion(网络伴侣)也是使用自定义格式来储存网络记录的
限于篇幅这里就不再对具体的程序进行详细的分析了要补充的一点是作者曾使用Diamond开发过RichExplorer这是一个专门用于浏览着名的大富翁论坛的离线数据库(Access格式)的阅读器在作者的主页上可以找到RichExplorer的全部源代码它完整地展示了一个使用第三方构件访问特定数据库的程序(没有使用DataAware控件)代码也比较简单适合于初学者分析有心的读者不妨作为参考
[] []