1.5 dbExpress驱动程序的设定
在1.2节中已经介绍了TSQLConnection控件使用的连接信息的内容来自于dbxconnections.ini文件。当开发人员使用TSQLConnection建立一个定制的数据库连接时,例如前面建立的CHINESEDEMO连接,TSQLConnection控件便在dbxconnections.ini文件中写入此定制连接的信息。事实上,dbExpress的连接信息是由两个配置文件(configuration file)定义的(见表1-3)。
表1-3
|
配置文件名称 |
功能说明 |
|
dbxconnections.ini |
储存Delphi内置的数据库连接信息以及开发人员定义的定制连接信息 |
|
dbxdrivers.ini |
储存dbExpress支持的物理数据库连接信息。例如dbExpress数据库驱动程序访问函数名称、用户名称、密码,使用的Transaction层级,数据库服务器名称以及数据库名称等,属于每一个数据库特定的信息 |
这两个文件位于BDS\4.0\dbExpress目录之下,其中dbxdrivers.ini文件所定义的是每一个特定数据库使用的连接信息。而当开发人员在TSQLConnection中建立新的数据库连接信息时,TSQLConnection会到dbxdrivers.ini文件中找到此特定数据库的连接信息作为定制连接信息的模板(template),再由开发人员修改其中特定的数值,例如用户登录名称和密码等。因此,我们可以说,dbxdrivers.ini提供了每一个dbExpress支持的数据库的模板信息。
在开发人员建立了定制的数据库连接之后,TSQLConnection首先会从dbxdrivers.ini中拷贝用户使用的数据库模板信息,接着结合用户针对此数据库连接输入的实际连接信息,再于dbxconnections.ini文件中写入此连接信息以便让dbExpress驱动程序在实际连接时作为连接信息之用。例如前面建立的CHINESEDEMO,我们在dbxconnections.ini中便储存了如下信息:
[CHINESEDEMO]
DriverName=INTERBASE
GETDRIVERFUNC=getSQLDriverINTERBASE
DATABASE=localhost:F:/My Books/dbExpress 2006/D2006HPDBP/Data/ChineseDemo.gdb
ROLENAME=RoleName
USER_NAME=sysdba
PASSWORD=masterkey
SERVERCHARSET=GB_2312
SQLDIALECT=3
BLOBSIZE=-1
COMMITRETAIN=False
WAITONLOCKS=True
ERRORRESOURCEFILE=
LOCALECODE=0000
INTERBASE TRANSISOLATION=ReadCommited
TRIM CHAR=False
HostName=localhost
上面的连接信息清楚地标明了CHINESEDEMO是连接到InterBase数据库的定制连接,因此,当dbExpress应用程序启动时,此参数选项便会在dbxdrivers.ini中查寻InterBase的dbExpress驱动程序细节。而在dbxdrivers.ini中则有如下信息:
[Interbase]
GetDriverFunc=getSQLDriverINTERBASE
LibraryName=dbxint30.dll
VendorLib=gds32.dll
Database=database.gdb
RoleName=RoleName
User_Name=sysdba
Password=masterkey
ServerCharSet=
SQLDialect=3
BlobSize=-1
CommitRetain=False
WaitOnLocks=True
ErrorResourceFile=
LocaleCode=0000
Interbase TransIsolation=ReadCommited
Trim Char=False
从上面的信息中可以看到,对Interbase的连接:dbExpress需要加载dbxint30.dll这个DLL文件,而且dbxint30.dll函数库的进入点是getSQLDriverINTERBASE函数,而dbExpress在使用LoadLibrary加载dbxint30.dll之后,就可以使用GetProcAddress取得getSQLDriverINTERBASE函数的地址,调用getSQLDriverINTERBASE就可以取得dbExpress的ISQLConnection接口,接着就可以连接到InterBase数据库了,在本书第13章会介绍dbExpress的实现原理,读者可以参考其中的内容。而dbxint30.dll则调用了InterBase安装在客户端的API GDS32.DLL函数库来真正地和InterBase连接互动。
对于所有支持Delphi 2006的数据库,这些信息都出现在dbxdrivers.ini文件的最前面,例如在Delphi 2006的dbxdrivers.ini中有如下信息:
[Installed Drivers]
DB2=1
Interbase=1
MySQL=1
Oracle=1
Informix=1
MSSQL=1
ASA=1
ASE=1
这8个数据库的旗帜都设定为1,因此,这8个数据库连接信息就是我们在图1-29中看到的dbExpress支持的8个数据库。

图1-29 dbxconnections.ini支持的数据库会出现在Add New Connection对话框中
最后我们打开TSQLConnection的View Driver Settings对话框,就可以清楚地看到每一个dbExpress驱动程序使用的特定的数据库厂商的函数库。例如从图1-30中我们可以确定Delphi 2006的MS SQL Server驱动程序是直接使用OLEDB来连接的,而不是使用ADO。
图1-30 在TSQLConnection的View Driver Settings中可以看到各dbExpress驱动程序使用的底部厂商驱动程序,例如MS SQL Server是使用OLEDB连接MS SQL Server数据库的







