由于人们在借助于Delphi 5中的BDE来开发数据库应用程序时,经常会出现一些莫名其妙的错误,故而导致了BDE的使用越来越受到冷遇,而相应的其它一些变通方法,譬如:利用ADO控件或利用一些第三方所提供的专用控件Diamond,则愈加受到追捧。但作为与Delphi一起绑定分发的BDE毕竟有着其独特的优势,只要我们真正地弄清楚BDE的工作原理,那么它还是能够为我们提供很好的服务的。   Delphi数据库应用的最大奥秘在于它的独特的数据库引擎BDE(Borland Database Engine),它使我们的程序编写更为方便,移植起来也十方便,可适应从客户/服务器模式到分布式网络计算,如果再充分利用Windows的多线程、COM、CORBA、MTS等机制,将会开发出更为美妙的东西来。Delphi主要是通过数据库引擎BDE来处理数据的。BDE实际上是由几个DLL模块组成的,它们分别负责处理一些数据库的相关工作。所有数据库存取使用的例程,均需要通过BDE来处理。BDE是Delphi数据库功能的枢纽部分,是连接应用程序和数据库的桥梁。Delphi可以通过BDE来控制读取本地数据库,Delphi自带的Xbase和Paradox无须安装,这对于开发原型或小型系统极为有益。对于远端的数据库系统,BDE则通过SQL Links或开放数据连接ODBC Drivers(Open Database Connectivity Driver)来存取数据库的内容。   BDE的初始化过程   如果在您的机器上装有其它版本或重复的BDE,那么BDE是按照下列的搜索顺序来载入BDE的DLL文件Idapi32.dll的,具体顺序如下:   1、搜索当前目录(该目录也许与应用程序的起动目录有所不同);如果没有找到该文件,将继续:   2、搜索注册表中BDE路径所对应的条目,HKEY_LOCAL_MACHINE/ SOFTWARE/ 
Borland/Database Engine/ DLLPATH/xxxxx ;如果没有找到该文件,将继续:   3、按照装载库文件的先后顺序来进行搜索: 1) 搜索应用程序的当前起动目录;如果没有找到该文件,将继续: 
2) 搜索System目录;如果没有找到该文件,将继续: 
3) 搜索Windows目录;如果没有找到该文件,将继续: 
4) 搜索PATH环境参数中所设置的路径。 
  
装载驱动程序的DLL文件的先后顺序除了第一步的搜索路径要换为Idapi32.dll这个文件被载入的目录之外,其它基本跟上面一样。   注:在某种情况下,从应用程序的当前起动目录中载入与BDE相关的DLL文件,是很有用的,因为用这种方法可以防止其它使用BDE的程序也同时运行;如果真的出现这种情况,将会发生初始化失败的错误信息:DBIERR_MULTIPLEIDAPI。   为DLL文件准备的共享内存装载地址   BDE预留了某些首选的内存地址以供它的一些DLL文件使用。在大多数情况下,如果DLL文件不能被载入那些首选的内存地址,那么系统将会自动地将它们载入其它内存地址。然而下面的这些DLL文件在所有使用BDE的应用程序中必须被载入特定的首选地址;本地的BDE驱动程序预留了下列地址:   BDE DLLs 地址: IDAPI32.DLL 0x4BDE0000 
IDPDX32.DLL 0x4CDE0000 
IDDBAS32.DLL 0x4DDE0000 
IDASCI32.DLL 0x4EDE0000   如果这些地址已经被其它应用程序所占用了,那么相应的BDE DLL文件就不会被载入,从而产生出错信息;这些出错信息具体如下:   1、如果相应的地址空间已经被占用,从而导致文件Idapi32.dll不能被载入,那么系统将返回DBIERR_CANTLOADIDAPI这条出错信息。   2、如果由于某种冲突,从而导致了任何一个共享驱动程序不能被载入,那么将返回带有该驱动程序名称的DBIERR_CANTLOADLIBRARY出错信息。   SQL驱动程序是不被共享的,故不需要固定的载入地址。 
 根据上述两条出错信息的发生机制,我们可以很容易理解下面的这个现象:   当我们利用InstallShield来制作应用程序的安装盘时,我们已经将所需要的诸如:与应用程序本身有关的文件和与BDE相关的文件,全部打包完毕,并且已确保了相关设置的正确性。然后去那些已经装有BDE的机器上进行该应用程序的安装,经常会碰到这条出错信息: An error occurred while attempting to initialize the Borland Database Engine (error $2109)。   产生这条出错信息的主要原因是:由于这台机器上以前由于安装其它程序的需要,已经装有BDE了;而现在如果你的这个应用程序在该台机器上进行安装的时候,它若发现该台机器上已经装有相同版本的BDE,那么它将会默认地不安装本来已经打包好的BDE,而采用该台机器上已经安装好的BDE,从而导致了上述的那个初始化错误。   为了解决上面那个问题,可以采用下面的两种方法中的一种:   一、 重新安装该应用程序,并在程序安装的过程中设置”Install BDE”选项处于选中状态。   二、 手工删除先前已经装好的BDE,然后再重新安装该应用程序。   至于如何手工删除先前已经装好的BDE,具体可以分为以下三个步骤来进行:   1、删除BDE目录中的所有文件。大多数情况下,该目录的路径是:C:Program FilesBorlandCommon FilesBDE,一旦BDE目录中的文件全部被删除后,你也可以将该BDE文件夹本身删去。   2、确保当前控制面板没有被打开,然后从C:WindowsSystem目录中删除BDEADMIN.CPL;这样做的目的是将控制面板中的BDE Administrator图标删除。   3、使用RegEdit将注册表中BDE的两个注册主键删去: HKEY_LOCAL_MACHINESOFTWAREBorlandBLW32和 
HKEY_LOCAL_MACHINESOFTWAREBorlandDatabase Engine。   多重初始化和退出机制   可以在同一进程里多次调用DbiInit,但是每一次对DbiInit的调用都必须有相对应的DbiExit紧随其后。   错误恢复方法   当发生一个致命的应用程序错误的时候,建议使用DbiExit来彻底地关掉BDE。   当发生一个致命的BDE错误的时候,建议关掉所有正在使用BDE的应用程序。