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

2008-04-09 04:23:13来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

第四章 BDE会话期
  不管是单层、两层还是多层的数据库应用程序,一般都要用到BDE(BorlandDatabase Engine)。Delphi 4用TSession来管理BDE会话期对象,用TSessionList来管理和操纵一个应用程序中所有的BDE会话期对象。
  一般来说,并不需要显式地把TSession构件放到窗体或数据模块上,因为数据库应用程序在每次启动时会自动创建一个默认的BDE会话期对象叫Session。但如果开发的是一个多线程的数据库应用程序,就要显式地用到TSession构件,因为几个线程有可能要同时连接数据库,应当避免每次连接数据库时都要创建应用程序的另一个实例。
4.1 TSession
  TSession构件能够对一个应用程序内的一组TDatabase构件提供全局控制。当创建数据库应用程序(包括应用服务器)时,应用程序会自动创建一个默认的BDE会话期对象叫Session。在应用程序中加入新的TDatabase构件和新的数据集构件时,这些构件会自动地处于默认的BDE会话期对象即Session的控制之下。此外,BDE会话期对象还能够提供访问Paradox表的口令,指定网络控制文件所在的目录,控制数据库的连接。
  除了默认的BDE会话期对象外,有些应用程序需要用到另外的TSession构件。例如,如果应用程序要并行查询同一个数据库,此时,每一个查询都必须有单独的BDE会话期。多线程的数据库应用程序也需要有多个BDE会话期。
  您既可以在设计期加入TSession构件,也可以在运行期动态地创建TSession构件。
4.1.1 默认的BDE会话期对象
  所有的数据库应用程序都会自动包含一个默认的BDE会话期对象叫Session,它的SessionName属性是Default。默认的BDE会话期对象能够对所有的TDatabase构件提供全局控制,不管这些TDatabase构件是在设计期显式地加到窗体或数据模块上的还是在运行期动态创建的。注意:默认的BDE会话期对象在设计期是不存在的,它只存在于运行期。
  无论是在设计期还是在运行期加入TDatabase构件时,加入的TDatabase构件都会自动处于默认的BDE会话期对象管理之下。当然,如果您显式地使用了多个TSession构件,您也可以设置TDatabase构件的SessionName属性指定其中一个TSession构件。
  TSession最重要的属性是KeepConnections,如果这个属性设为True,即使当前没有打开数据集,也保持与数据库的连接。这样,下次打开数据集时,就不必再登录数据库。
  注意:应用程序千万不要试图删除默认的BDE会话期对象。
4.1.2 创建另外的BDE会话期对象
  有些情况下需要用到另外的BDE会话期对象。在设计期,您可以把一个或多个TSession构件加到窗体或数据模块上,然后在对象观察器中设置它们的属性,建立事件句柄,调用它们的方法。您也可以在运行期动态地创建BDE会话期对象。
  要在运行期动态地创建BDE会话期对象,可以参照下列步骤:
  第一步是声明一个TSession类型的变量。
  第二步是调用TSession的Create创建一个TSession的对象实例。Create会自动把Databases数组清为空,把KeepConnections属性设为True,同时还把新创建的BDE会话期对象加到由Sessions管理的BDE会话期对象的列表中。
  第三步是设置SessionName属性指定此BDE会话期对象的名称,注意不能与其他BDE会话期名称相同。TDatabase和数据集构件都是通过名称来区分BDE会话期对象。
  第四步是激活此BDE会话期对象,然后设置有关属性。
  下面的程序示例创建了一个BDE会话期对象,最后又删掉了这个BDE会话期对象。
var SecondSession: TSession;
Begin
SecondSession := TSession.Create;
With SecondSession Do
Try
SessionName := ''''SecondSession'''';
KeepConnections := False;
Open;
...
Finally
SecondSession.Free;
End;
End;
  实际上,也可以调用TSessionList的OpenSession函数来创建BDE会话期对象,这个函数需要传递一个SessionName参数,指定要创建的BDE会话期对象的名称。如果与SessionName参数匹配的BDE会话期对象已存在,这个函数就激活它。程序示例如下:
Var MySession : TSession;
MySession := Sessions.OpenSession(''''MySession'''');
...
MySession.Free;
4.1.3 给BDE会话期对象命名
  TSession的SessionName属性用于给BDE会话期对象命名。对于默认的BDE会话期对象来说,它的SessionName属性是“Default”。
  在同一个应用程序内,BDE会话期对象的名称不能有重复。如果把TSession的AutoSessionName属性设为True,Delphi 4将自动为每个BDE会话期对象指定一个相异的名称,这样就不用担心重名。如果AutoSessionName属性设为False,应用程序就必须设置SessionName属性给每个BDE会话期对象指定一个相异的名称。在AutoSessionName属性设为True的情况下,不能直接修改SessionName属性的值。
  不过,使用AutoSessionName属性有许多限制。例如,如果窗体或数据模块上有多个TSession构件,就不能把AutoSessionName属性设为True。如果窗体或数据模块上已经有一个TSession构件,并且它的AutoSessionName属性设为True,就不能再把另一个TSession构件加到窗体或数据模块上。
  TDatabase构件和数据集构件都有一个SessionName属性,用于指定一个BDE会话期对象的名称。如果它们的SessionName属性为空,表示使用默认的BDE会话期对象。
  下面这个例子首先调用TSessionList的OpenSession创建一个BDE会话期对象,然后设置Database1的SessionName属性指定刚创建的BDE会话期对象。
var
IBSession: TSession;
...
Begin
IBSession := Sessions.OpenSession(''''InterBaseSession'''');
Database1.SessionName := ''''InterBaseSession'''';
End;
4.1.4 激活BDE会话期对象
  如果TSession的Active属性返回True,表示BDE会话期对象处于活动状态。如果把这个属性设为True,将激活BDE会话期对象,并触发OnStartup事件。
  激活了BDE会话期对象后,就可以调用OpenDatabase函数来连接数据库。
  把Active属性设为True,相当于调用Open。把Active属性设为False,相当于调用Close。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:StringGrid使用全书( 一)

下一篇:多层数据库开发九:查询数据库