服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

DELPHI基础教程:Delphi客户服务器应用开发(三)[2]


发布日期:2022年11月02日
 
DELPHI基础教程:Delphi客户服务器应用开发(三)[2]

KeepConnection属性描述当数据库中没有打开表时是否要保持与服务器的联连 如果数据库应用需要打开和关闭单个数据库中的多个表时将KeepConnection 设置为True是很有用的那样即使没有打开任何表应用仍能保持与数据库的联接它能够重复地打开和关闭数据库表而不需要重复执行联接过程如果KeepConnection置为False当每次将Connected置为True数据库都必须执行注册过程

⑺ LoginPrompt属性

LoginPrompt属性用于控制如何处理SQL数据库的安全性问题如置为True当应用程序试图建立数据库联接时屏幕上将出现标准Delphi注册对话框用户必须输入正确的用户名和口令如果置为False则应用程序将寻找TDatabase部件的Params 属性中的注册参数下面是USERNAME和PASSWORD参数的例子

USERNAME = SYSDBA

PASSWORD = masterkey

⑻ TransIsolation属性

TransIsolation属性描述SQL服务器所有的事务控制独立级别 tiDirtyRead使所有修改都被返回而不管记录是否已被提交tiReadCommitted将只返回提交的记录而提交的修改将不会在结果中反映出来tiRepeatableRead 将只返回事务过程中最初的记录即使另一个应用程序将所作的修改提交

各种数据库服务器可能不同程度地支持这些独立级别或者根本不支持 如果需要的独立级别不被服务器支持那么Dephi将使用下一个更高的独立级别如下表所示

各类服务器TransIsolation设置

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

独立级别 Oracle Sybase和 InterBase

Microsoft SQL

──────────────────────────────────────

Dirty Read Read Committed Read Committed Read Committed

Read Committed Read Committed Read Committed Read Committed

Repeatable read Repeatable read Not Supported Repeatable Read

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

各个独立级别的含义请见表

TDatabase的关键方法

⑴ StartTransaction方法

StartTransartion方法在由TaransIsolation属性指定的独立级别下开始事务控制如果在一个事务已被激活的情况下调用该方法Delphi将引发异常

调用了该方法后对数据库所做的修改一直由数据库服务器维持到调用Commmit方法提交数据或调用Rollback方法取消修改为止只有当联接数据库服务器时才能调用该方法

⑵ Rollback方法

Rollback方法返转当前事务控制并且取消自最近一次调用StartTransaction以来对数据库所做的所有修改

⑶ Commit方法

Commit方法提交当前事务控制并且将自最近一次调用StartTransaction以来所有数据修改存入数据库

TDatabase的OnLogin事件的处理

OnLogin事件的触发条件是当联接SQL数据库的TDatabase部件被打开并且LoginPrompt属性为True使用OnLogin事件处理过程可以在运行时设置注册参数OnLogin 事件处理过程得到TDatabase的注册参数数组Params并且使用Values属性改变这些参数

例如

LoginParamsVaiues[SERVER NAME] := MYSERVERNAME;

LoginParamsValues[USER NAME] := MYUSERNAME;

LoginParamsValues[PASSWORD] := MYAPSSWORD;

当控制从OnLogin事件处理过程中返回时应用程序用这些参数来建立联接

OnLogin事件处理过程的声明是这样的

TLoginEvent = procedure(Database: TDatabase; LoginParam: TStrings) of Object;

property OnLogin: TLoginEvent;

TLoginEvent类型是处理OnLogin事件的方法头Database参数是要联接的数据库LoginParams是TStrings类型的对象包含用户名和口令以及打开数据库时所用的其它参数用户名是形如USER NAME = JohnDoe的字符串口令是形如PASSWORD = is_Password的字符串当OnLogin事件处理过程被调用时应当在LoginParams中加入用户名和口令

定制数据库服务器的注册参数

大多数数据库服务器都包含限制数据库访问的安全特征通常在用户能访问数据库之前服务器都要求注册的用户名和口令

如果服务器需要注册在设计阶段Delphi 会在你试图联接时提示你诸如在会TTable部件描述数据库表名时

在缺省情况下Delphi应用在打开数据库服务器的联接时显示标准注册对话框如果联接已建立则注册对话框不会出现

可以用下列方法处理服务器注册

将TDatabase部件的LoginPrompt属性置为True这样当应用程序试图建立数据库联接时标准注册对话框会打开

将LoginPrompt属性置为False在TDatabase部件的Params属性中包含用户名和口令参数例如

USERNAME = SYSDBA

PASSWORD = mosterkey

但不推荐使用该方法因为这会危害数据库安全

使用TDatabase部件的OnLogin事件设置注册参数OnLogin事件得到TDatabase 注册参数数组的拷贝并利用Values属性改变这些参数

LoginParamsValues[SERVER NAME] := MYSERVERNAME;

LoginParamsValues[USER NAME] := MYUERNAME;

LoginParamsValues[PASSWORD] := MYPASSWORD;

当控制从数据库注册事件处理过程中返回时这些参数被用来建立联接

建立应用程序特定的别名

TDatabase的Aliases描述了数据库表的位置和数据库服务器的联接参数通常都是在Delphi之外运用BDE配置工具(BDECFGEXE)创建别名并且别名被存在BDE 配置文件IDAPICFG中

用户也可以用TDatabase创建只在应用程序中可用的别名用TDatabase 创建的别名不会加进BDE配置文件中任何DataSet部件可通过描述DatabaseName 属性来使用这些别名为了定制这些局部别名的参数用鼠标左键双击TDatabase部件或从TDatabase部件中选择Database EditorDelphi就会打开数据库属性编辑器(Database Properties Editor)

控制数据库的联接

TDatabase部件的Connected属性指示TDatabase部件是否建立与数据库服务器的联接当应用程序打开数据库中的表时Connected被设置为True将Connected 设为True就建立了数据库的联接

保持数据库联接

TDatabase的KeepConnection属性描述当没有数据库表打开时是否要与保持数据库的联接

如果应用程序需要在单个数据库中多次打开关闭多个表时将KeepConnection 置为True能使应用程序具备更好的性能

当KeepConnection为True时即使没有表打开应用程序也能保持数据库的联接那么就能重复打开和关闭数据库表而不需每次进行联接注册

使用TSesstion控制联接

TSesstion部件有一个面向整个应用程序的KeepConnections属性如果SessionKeepConnections为True那么用于所有TDatabase部件的数据库联接都是持久的

TSession为应用程序提供数据库联接的全局控制TSession中的Databases 属性是Session中所有活跃数据库组成的数组DatabasesCount属性描述活跃数据库的数目

描述Net和Private目录

TSession的NetFileDir属性描述BDE网络控制目录的路径TSession的PrivateDir属性描述存储诸述处理局部SQL表达式的临时文件的目录的路径

获取数据库信息

TSession拥有许多让用户获取数据库有关的信息每个方法都以TStringList 部件作为传入参数并将信息返回TStringList中

GetAliasNames方法

声明procedure GetAliasNames(List: TStringList)

GetAliasNames方法消除List中的参数并将所有已定义的BDE别名的名字写入List应用程序生成的别名不包括在内

GetAliasParams方法

声明procedure GetAliasParams(const AliasName: String; List: TStringList)

GetAliasParams方法清除List的内容并将BDE别名为AliaName的参数写入List

[] [] [] []

               

上一篇:DELPHI基础教程:Delphi客户服务器应用开发(三)[3]

下一篇:DELPHI基础教程:Delphi客户服务器应用开发(三)[1]