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

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

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

4.6.2 RemovePassword和RemoveAllPasswords
  TSession的RemovePassword用于删除一个先前用AddPassword输入的口令。RemovePassword只需要传递一个参数,即要删除的口令。程序示例如下:
  Session.RemovePassword(''''1234'''');
  TSession的RemoveAllPasswords函数用于删除先前所有输入的口令,程序示例如下:
  Session.RemoveAllPasswords;
4.6.3 OnPassword和GetPassword
  当程序试图打开一个受口令保护的Paradox表时将触发该事件,应当在处理这个事件的句柄中调用AddPassWord函数输入一个口令,然后把Continue参数设为True。
  调用GetPassword函数也会触发OnPassword事件。下面这个例子动态地把一个方法作为处理OnPassword事件的句柄:
Procedure TForm1. FormCreate(Sender: TObject);
Begin
Session.OnPassword := Password;
End;
  Password又调用InputBox函数打开一个输入框让用户输入口令,如果用户输入了口令的话,就把Continue参数设为True。
Procedure TForm1.Password(Sender: TObject;
var Continue: Boolean);
var Passwrd: String;
Begin
Passwrd := InputBox(''''Enter password'''', ''''Password:'''', '''''''');
Continue := (Passwrd > '''''''');
Session.AddPassword(Passwrd);
End;
  如果用户输入的口令是错误的,则仍然不能打开Paradox表,因此,凡是要打开一个Paradox表的代码必须能处理异常。
  Procedure TForm1.OpenTableBtnClick(Sender: TObject);
const CRLF = #13 #10;
Begin
Try
Table1.Open; {将触发OnPassword事件}
Except
On E:Exception Do
Begin
ShowMessage(''''Error!'''' CRLF E.Message CRLF);
Application.Terminate;
End;
End;
End;
4.7 管理多个BDE会话期对象
  如果要创建一个多线程的数据库应用程序,就需要用多个TSession构件,而且必须在设计期显式地加到窗体或数据模块上,还要保证它们的SessionName属性是相异的。
  Delphi 4用TSessionList来管理和操纵一个应用程序中所有的BDE会话期对象,并且已自动声明了TSessionList的对象示例Sessions。
  如果要动态地创建一个新的BDE会话期对象,这就要用到TSessionList的OpenSession函数。这个函数只需要传递一个参数,即要创建的BDE会话期的名称。程序示例如下:
  Sessions.OpenSession(''''RunTimeSession'''' IntToStr(Sessions.Count 1));
  上述代码能保证BDE会话期的名称不会与已有的BDE会话期重复。
  TSessionList定义了一些属性和方法用来操纵BDE会话期对象,这里简单介绍一下:
.Count 返回BDE会话期对象的个数,包括活动的和非活动的;
.FindSession 查找一个指定的BDE会话期对象,如果没有找到,就返回NIL;
.GetSessionNames 返回所有BDE会话期对象的SessionName属性组成的列表;
.List 通过这个属性可以按名称访问一个BDE会话期对象;
.OpenSession 动态地创建一个BDE会话期对象;
.Sessions 通过这个属性可以按序号访问一个BDE会话期对象。
  在多线程的数据库应用程序中,在打开一个数据库之前,首先要检查这个数据库是否已经被其他线程打开。怎么检查呢?用TSessionList的Count属性和Sessions属性遍历所有的BDE会话期对象,逐个检查每个BDE会话期对象的Databases属性中是否包含要打开的数据库,如果有的话,说明这个数据库已经被某个线程打开,也就是说,不能再在这个BDE会话期内打开数据库,您得换下一个再进行检查。
  如果所有的BDE会话期对象都在使用这个数据库,就必须创建一个新的BDE会话期对象,然后再打开数据库。

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