当BDE会话期对象被激活时将触发OnStartup事件,这样就有机会设置NetFileDir、PrivateDir和ConfigMode等属性,不过,NetFileDir和PrivateDir属性只在访问Paradox表才是有效的。ConfigMode属性用于设置哪些BDE别名是可见的。
4.1.5 KeepConnections属性
如果KeepConnections属性设为True,即使当前没有打开任何数据集,也保持与数据库的连接。如果这个属性设为False,当所有的数据集都关闭时,就断开与数据库的连接。
这个属性是针对动态生成的临时的TDatabase构件而言的,如果显式地使用了TDatabase构件,将以它的KeepConnections属性为准。
如果一个应用程序需要频繁地打开和关闭所有的数据集,特别是当这些数据集是在一个远程数服务器上时,最好把KeepConnections属性设为True,这样可以避免再次登录到远程服务器。否则,应用程序不得不重新登录。
不过,即使在KeepConnections属性设为True的情况下,仍然可以调用DropConnections函数把空的连接断开。所谓空的连接,是指当前并没有打开任何数据集,但由于KeepConnections属性设为True,仍然保持在连接状态。
4.1.6 打开和断开连接
要打开一个数据库的连接,调用OpenDatabase函数。这个函数需要传递一个DatabaseName参数,用于指定要打开的数据库的名称,可以设为BDE别名或TDatabase构件的名称。对于Paradox或dBASE,DatabaseName参数也可以设为表所在的路径。
下面的程序示例试图打开别名为DBDEMOS的数据库:
var
DBDemosDatabase: TDatabase;
Begin
DBDemosDatabase := Session.OpenDatabase(''''DBDEMOS'''');
...
End;
OpenDatabase会首先自动激活BDE会话期(如果还没有激活的话),然后判断DatabaseName参数是否与BDE会话期对象所管理的TDatabase构件的名称匹配,如果没有找到匹配的数据库,OpenDatabase就会自动创建一个临时的TDatabase构件。最后,OpenDatabase调用TDatabase的Open连接数据库。
OpenDatabase实际上是使一个内部的计数加1,只要这个计数大于0,数据库就处于连接状态。
可以调用CloseDatabase函数来关闭一个数据库。与OpenDatabase一样,CloseDatabase也需要传递一个DatabaseName参数来指定要关闭的数据库,例如:
Session.CloseDatabase(DBDemosDatabase);
CloseDatabase实际上是使一个内部的引用计数减1,当引用计数减到0时,数据库才被关闭。
如果DatabaseName参数指定的数据库是由一个临时的TDatabase构件管理的,而且KeepConnections属性设为False,当数据库被关闭的同时,相应的TDatabase构件也被删除。
在KeepConnections属性设为False的情况下,对于那些临时创建的TDatabase构件来说,如果当前没有打开任何数据集,数据库将自动关闭,TDatabase构件将自动删除。对于那些显式加到窗体或数据模块上的TDatabase构件来说,需要调用Close才能关闭数据库。
如果要一次关闭所有的数据库,可以把BDE会话期对象的Active属性设为False,或者调用Close函数。把Active属性设为False,会自动调用Close,而Close会关闭所有的数据库,删除所有临时创建的TDatabase构件,然后依次调用那些显式使用的TDatabase的Close,最后,把BDE会话期的句柄设为NIL。
在打开和关闭数据库之前,可能需要调用FindDatabase函数来查找一个特定的数据库是否存在。FindDatabase函数需要传递一个DatabaseName参数,用于指定要查找的数据库,可以设为BDE别名或者TDatabase构件的名称。对于Paradox或dBASE表来说,可以设为表所在的路径。如果找到的话,FindDatabase函数就返回一个TDatabase构件,否则,就返回NIL。下面这个例子试图搜索别名为DBDEMOS的数据库:
var
DB: TDatabase;
Begin
DB := Session.FindDatabase(''''DBDEMOS'''');
If (DB = nil) then DB:=Session.OpenDatabase(''''DBDEMOS'''');
If Assigned(DB) and DB.Active then
Begin
DB.StartTransaction;
...
End;
End;
4.2 检索有关BDE会话期的信息
TSession提供了许多方法用于检索有关BDE会话期的信息如别名的参数等,下面简单介绍这些方法。
.GetAliasDriverName返回一个别名的驱动程序;
.GetAliasNames返回所有BDE别名的列表;
.GetAliasParams返回一个别名的参数的列表;
.GetConfigParams返回配置文件中的特定信息;
.GetDatabaseNames返回所有BDE别名的列表(含占用的别名);
.GetDriverNames返回已安装的驱动程序的列表;
.GetDriverParams返回一个驱动程序的参数;
.GetStoredProcNames返回一个数据库中的存储过程名;
.GetTableNames返回一个数据库中的表格名。
上述方法中,除了GetAliasDriverName返回一个字符串外,其他方法都是返回一个列表。下面的例子试图检索所有的BDE别名:
var List: TStringList;
Begin
List := TStringList.Create;
Try
Session.GetDatabaseNames(List);
...
Finally
List.Free;
End;
End;
4.3 管理BDE别名
对于BDE会话期对象来说,BDE别名特别重要,许多方法都需要传递一个数据库的别名作为参数。TSession提供了管理BDE别名的功能。
4.3.1 指定别名的可见性
ConfigMode属性用于设置哪些BDE别名对BDE会话期是可见的。ConfigMode属性是一个集合,默认值是[cmAll],相当于[cfmVirtual,cfmPersistent],表示所有的别名对BDE会话期都是可见的,包括BDE配置文件中定义的别名、BDE会话期创建的专用别名。
使用ConfigMode属性的主要目的是限制别名的可见性。例如,可以把ConfigMode属性设为[cfmVirtual],表示只能看到本BDE会话期创建的别名,不能看到其他BDE会话期创建的别名,也不能看到BDE配置文件中定义的永久别名。
在BDE会话期创建的别名只存在于内存中,默认情况下,只对本BDE会话期是可见的,其他BDE会话期即使是在同一个应用程序内都无法看到这些别名。
如果要使BDE会话期创建的别名能够被所有的BDE会话期甚至其他应用程序看到,首先要调用SaveConfigFile把别名保存到BDE配置文件中,这样,其他BDE会话期或其他应用程序才可以使用这个别名。当然,ConfigMode 属性需要设为[cmAll]。
4.3.2 创建、修改和删除别名
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




