转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
多层数据库开发四:BDE会话期         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1492 更新时间:2009/4/23 18:28:44
ble1.Open
Except
  ShowMessage(''''Could not open table!'''');
Application.Terminate;
End;
End;
  上面这个例子中调用InputBox函数让用户输入口令,也可以调用PasswordDialog函数,或者用TEdit构件做一个编辑框,把PasswordChar属性设为星号。
  如果用PasswordDialog函数的话,需要传递BDE会话期对象作为参数,程序示例如下:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
If PasswordDialog(Session) then
 Table1.Open
Else
 ShowMessage(''''No password given, could not open table!'''');
End;
  上述程序将打开一个“Enter password”对话框,如图4.1所示。
  图4.1 输入口令
  对话框上的“Add”按钮相当于调用AddPassword函数,“Remove”按钮相当于调用RemovePassword函数,“Remove All”按钮相当于RemoveAllPasswords函数。
  注意:要在程序中调用PasswordDialog函数,必须引用DBPWDlg单元。
如果您没有调用AddPassword或PasswordDialog函数来提供口令,当访问有口令保护的Paradox表和dBase表时,就会自动弹出如图4.1所示的对话框,让用户输入口令。
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会话期对象,然后再打开数据库。

上一页  [1] [2] 


[系统软件]InstallShield Express for delphi制作安装程序定…  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台