首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 计算机等级考试 > 计算机二级 > Delphi > 复习资料 > 正文

2011计算机等考Delphi:Delphi客户服务器应用开发

来源:考试吧Exam8.com) 2010-10-30 9:05:16 考试吧:中国教育培训第一门户 模拟考场
本章中我们将阐述客户服务器体系结构原理、如何用Delphi构建客户/服务器的环境和Delphi存取远程SQL服务器的编程和注意事项。

  4. 解决一般的联接问题

  如果用SQL Links建立与InterBase服务器的连接有问题可采用下列步骤来分离问题原因:

  ⑴ 通过Windows ISQL工具测试能否与InterBase服务器联接

  如果成功,状态信息会出现,并继续步骤⑵。

  如果不成功,询问数据库管理员。

  ⑵ 检验InterBase SQL Links 驱动程序是否正确安装。

  ⑶ 重新安装SQL Links。

  ⑷ 检查SERVICES,文件中应有行:

  gds_db 3050/tcp

  如果不能正确安装,就请询问数据库管理员,否则继续步骤⑸。

  ⑸ 测试底层协议

  ① 输入TELNET命令,确认TCP库是否正确安装。

  如果TCP库正确安装,注册提示符会出现。注册入网检查数据库是否存在。

  如果消息是“can't resolve hostname” 出现,检查工作站的HOSTS文件是否有你 的主机名和IP地址的人口。如:

  128.127.50.12 mis_server

  如果用TELNET是成功的,但仍然无法正确联接,则没有正确安装InterBase。请寻

  求数据库管理员的帮助。

  ② PING到服务器服务器上,测试InterBase服务器是否正常运行并且为桌面应用可见

  (如果PING是成功的,消息“servername is alive”被显示)。

  PING成功但TELNET不成功,则inet daemon可能有问题。

  如果PING到服务器上不成功,则有网络路径问题,将问题报给网络管理员。

  如果底层协议不正常,请询问数据库管理员,否则继续帮助⑹。

  ⑹ 确认是否有InterBase服务器的访问权,如果有请继续步骤⑺。

  ⑺ 检查BDE应用程序的InterBase别名是否正确安装。

  如果能够直接从工作站上联接,但不能从BDE应用程序中,那么很有可能你的

  IDAPI32.CFG别名设置有问题。运行BDE配置工具检查InterBase别名。

  18.3 Delphi Client/Server编程

  本节介绍如何运用Delphi可视化开发工具和ObjectPascal语言开发Client\Server的数据库应用程序,采用的例子是CSDEMOS。这是Delphi2.0自带的演示Client\Server开发的例子,它安装在C:\Program Files\Borland\Delphi 2.0\Demos\DB\CSDemos中(缺省安装)。

  本节将包含以下内容:

  ● 使用TDatabase部件连接SQL服务器

  ● 用DataSet部件(又称数据集部件),如TTable和TQuery,联接TDatabase部件并访问数据库以及各种表之间如何切换

  ● 使用数据库连接

  ● 触发器的使用方法

  ● TStoredProc部件的使用方法

  ● 客户和服务器之间的事务控制

  ● TStoredProc部件的使用方法

  18.3.1 使用TDatabase部件联接SQL服务器

  18.3.1.1 TDatabase部件概述

  TDatabase部件处理应用程序与单个数据库的联接。如果不需要控制数据库联接,可以不用创建TDatabase部件。当应用程序试图打开数据库表(Table)时,会自动创建一个临时的TDatabase部件。但如果你想控制数据库的持续联接、进入数据库服务器的注册和数据库别名的值或事务控制,那么你就必须为每个所需的联接创建一个TDatabase部件。

  1. 创建TDatabase部件

  TDatabase 部件在Component Palette中的Data Access页上,你能将其拖放在数据模块(Data module)或窗体中。在设计时创建TDatabase 部件,用户可以设置初始值和编写OnLogin事件处理过程(Event Handle)。OnLogin事件给用户提供了第一次注册数据库服务器时定制服务器安全参数,如口令,的能力。

  2. TDatabase的关键属性

  ⑴ DatabaseName属性

  DatabaseName是所要联接的数据库名,并且用于DataSet软件,它将出现在DataSet部件的DatabaseName属性的下拉式列表框中。设置DataBaseName属性是定义数据库应用的特定别名。DataSet部件能引用该名字以取代直接使用BDE别名。当TDatabase部件的Connected属性为True时不能修改该属性。

  ⑵ AliaName属性

  AliasName是BDE配置工具定义的BDE别名的名字。TDatabase 从中获取其缺省的设置。如果设置DriveName属性,则该属性将被清除,如果当Connected为True 时强行设置DriveName属性将引发异常。

  ⑶ DriveName属性

  DriveName是BDE驱动程序,如STANDARD 、ORACLE、SYBASE、INFORMIX或INTERBASE的名字。如果设置AliasName,则该属性值将被清除。

  ⑷ Params属性

  Params属性包含了打开SQL服务器上数据库时所需的参数。在缺省情况下,这些参数由BDE配置工具设置;用户也可以用数据库参数编辑器(Database Parameters Editor)修改这些参数。对于数据库服务器而言,Params将描述一系列的参数,如服务器名、 数据库名、用户名和口令。

  ⑸ Connected属性

  Connected属性指明是否建立数据库的联接,当应用程序打开数据库中的一个表时Connected将被置为True;反之,关闭数据库表,Connected将被置为False,除非KeepConnection为True。而将Connected置为True则可不需打开数据库表即可建立数据库联接。TDatabase的KeepConnection属性描述当数据库中没有表打开时是否维持数据库联连。

  ⑹ KeepConnection属性

  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将使用下一个更高的独立级别,如下表所示:

  表18.10 各类服务器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

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

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

  3. TDatabase的关键方法

  ⑴ StartTransaction方法

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

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

  ⑵ Rollback方法

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

  ⑶ Commit方法

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

  4. TDatabase的OnLogin事件的处理

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

  例如:

  LoginParams.Vaiues['SERVER NAME'] := 'MYSERVERNAME';

  LoginParams.Values['USER NAME'] := 'MYUSERNAME';

  LoginParams.Values[PASSWORD'] := 'MYAPSSWORD';

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

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

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

  property OnLogin: TLoginEvent;

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

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

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

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

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

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

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

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

  USERNAME = SYSDBA

  PASSWORD = mosterkey

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

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

  LoginParams.Values['SERVER NAME'] := 'MYSERVERNAME';

  LoginParams.Values['USER NAME'] := 'MYUERNAME';

  LoginParams.Values['PASSWORD'] := 'MYPASSWORD';

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

  18.3.1.3 建立应用程序特定的别名

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

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

  18.3.1.4 控制数据库的联接

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

  1. 保持数据库联接

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

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

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

  2. 使用TSesstion控制联接

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

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

  3. 描述Net和Private目录

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

  18.3.1.5 获取数据库信息

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

  1. GetAliasNames方法

  声明:procedure GetAliasNames(List: TStringList);

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

  2. GetAliasParams方法

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

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

  3. GetDatabaseNames方法

  声明:procedure GetDatabaseNames(List: TStrings);

  GetDatabaseNames方法清除List的内容并将所有BDE别名和应用程序定义的别名的名字写入List。

  4. GetDriverNames方法

  声明:procedure GetDriverNames(List: TStrings);

  GetDriverNames方法清除List中的内容,并将BDE当前安装的驱动程序名写入List。

  5. GetDriverParams方法

  声明:procedure GetDriverParams(const DriverName: String; List: TStrings);

  GetDriverParams方法消除List中的内容,并将名为DriveName驱动程序缺省参数写入List。

  6. GetTableNames方法

  声明:procedure GetTableNames(const DatabaseName, Pattern: Strings;

  Extensions, SystemTable: Boolean; List: TStrings);

  GetTableNames方法消除List中的内容,并将名为DatabaseName的数据库中的所有表的名字写入List。Pattern参数将限制表名。对于SQL服务器,将SystemeTables设为True将获取系统表和用户表。对非SQL数据库,将Extensions设为True将在表名中包含扩展名。

  18.3.2 处理Client/Server事务控制

  使用隐式控制和显示控制的数据库应用中有两种方法管理事务控制:

  ● 运用TDatabase部件的属性和方法进行显式控制

  ● 运用TQuery部件的传递式SQL控制事务

  Delphi还支持Paradox和dBASE表的局部事务处理

  18.3.2.1 事务控制概述

  当用Delphi创建数据库应用时,Delphi提供了用为所有数据库访问的事务控制。

  事务是这样一组操作,在被提交前,它们对一个或多个数据库的操作,必须全部执行成功。如果其中一个操作失败,则所有操作失败,即事务具有原子性。

  即使发生硬件失败,事务也要保证数据库一致性。当允许多用户并发访问时,事务还要维持数据完整性。

  例如:一个应用程序可能更新ORDERS表以指明接受购买某一项目的定单,那么也要更新INNENTORY表以反映库存的减少。如果在第一个更新之后,第二个更新之前发生硬件错误,数据库就会处于不一致状态,因为库存情况没有反映定单情况。在事务控制下,两个表达式将在同一时间提交,如果其中一个表达式失败,则被返转(Rolled Back)。

  18.3.2.2 使用隐式控制

  在缺省情况下,Delphi通过BDE为应用程序提供隐式事务控制。当应用程序处于隐式事务控制时Delphi为DataSet中的写每个记录进行隐式事务控制。它提交每一个独立的写操作,如Post和Append Record。

  使用隐式事务控制是容易的,它保证最小的记录更新冲突和数据库的一致性视图。另一方面,因为写入数据库的数据的每一行都要进行事务控制, 所以隐式事务控制将导致网络过忙和应用程序性能下降。

  如果采用显式事务控制,就能选择最有效的时机来开始、提交和终止事务,特别是在开发多用户环境下的客户应用程序运行访问远程SQL服务器,就更应该采用显式控制。

  18.3.2.3 使用显式事务控制

  有两种协作又独立的方式可运用于Delphi数据库应用的事务控制:

  ● 使用TDatabase部件的方法和属性

  ● 使用TQuery部件中的传递式SQL。这种方式只有在Delphi Client/Server Suite版中才有效,SQL Links将SQL表达式直接传给过程SQL或ODBC服务器

  使用TDatabase部件的方法和属性的好处是提供了清晰的、轻便的、与特定数据库或服务器无关的应用能力。

  使用传递式SQL的主要好处在于可以运用特定服务器的先进事务管理能力。

上一页  1 2 3 4 5 6 7 8 9 下一页
  相关推荐:2010年9月计算机等级考试试题及答案解析专题
       预告:名师解析2010年9月计算机等级考试试题答案
       2010年9月计算机等级考试成绩查询时间及入口
       2010年9月计算机等考成绩查询短信免费提醒开通
文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。