手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

多层数据库开发四:BDE会话期

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

  对于默认的BDE会话期对象即Session,最好不要把它的Active属性设为False。
  当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]。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!