精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>数据库编程------乾坤在握>>C++Builder多层数据库设计(八)

主题:C++Builder多层数据库设计(八)
发信人: skyice()
整理人: skyice(1999-12-30 01:17:58), 站内信件
7.3客户应用程序
  总的来说,前面作的那些工作还是比较简单的.使客户应用程序能够运行应用
服务程序和访问数据库的工作要复杂一些.最好在同一台计算机上设计应用服
务程序和客户应用程序.所有一切都正常运行后,再把客户应用程序或应用服务
程序移到他们所存放的计算机上.
  回到将现有应用程序项目转变为一个客户应用程序的话题上.因为我们已经
在主窗体上删除了所有的Data Access(数据访问)组件,那么代码是不能进行
编译的.
  首先,应该通过客户应用程序的TRemoteServer组件建立与应用服务程序之
间的连接.
  TRemoteServer在多层数据库应用程序的客户程序中使用,用来建立和维护
客户机与远程应用服务程序之间的连接.远程服务器对象可以:
  * 与远程应用服务程序相连.
  * 通过这个连接给出一个提供客户数据集的有关供应商名单列表.
  * 可以取得一个基于上面列表的IProvider接口.
  * 对通过这个连接进行服务的本地客户数据集列表进行维护.
  * 断开与远程应用服务程序之间的连接.
  远程服务器对象通过使用DCOM来建立客户应用程序与远程应用服务程序之间
的初始连接.当建立这个连接后,客户机通过远程应用服务程序注册在客户集中
的所有客户数据集,然后,这些客户数据集就可以通过他们的IProvider接口,直
接与应用服务程序的TProvider对象进行通信.
  从组件选项版的Data Access页中选择RemoteServer组件,将她放置在主窗
体中,并且把她命名为ObjBrwRS.在Object Inspector中,将Computer Name
设置为当前计算机的名称.当需要查找应用服务程序时,客户应用程序就会查找
这个计算机名.
  注释:
  如果想要重新设置应用服务程序的路径,那么就需要将Computer Name设置
为新的应用服务程序所在的计算机名.同时,必须再次在新的计算机下设置DCOM
工具.
  因为已经运行和注册了应用服务程序,所以使用Object Inspector是,在Re-
moteServer的ServerName属性框的下拉列表中应该出现正确的类名.选择服务
程序后,会在ServerGUID属性框中自动的填写ID值.GUID是用来表示对象的全
程标识符.
  现在,我们就来检测一下这个连接.将Connected属性设置为Ture(或者将他
保留为True)后,应该可以启动应用服务程序.
  注释:
  这时,如果所用的表的数据没有出现在DBGrid组件中,也不必担心.
  这并不意味着数据库没有正确的连接,只不过是C++Builder的一个特征.
  在客户程序中没有必要创建TDatabase组件,因为应用服务程序会处理这一
切.所有与TDatabase组件(ClassOrgDB)有关的代码会被删除.
  下面将使用的不是TTable组件,而是TClientDataSet组件.TClientData-
Set组件封装了一个与数据库无关的分布式数据集.客户数据集(非鱼注:此处
应为ClientDataSet,即指TClientDataSet组件,"客户数据集"是翻译上的错
误.但原书上即如此,为忠实于原著,故不作更改,此注为便于大家理解)可以用
来作为:
  * 单层数据库应用程序中简单的,功能完整的,平面文件数据集.客户数据集
    (注:同上)这样使用时,应用程序就可以通过客户数据集直接对用户的硬盘
    进行读写操作,而不需要访问BDE.
  * 多层数据库应用程序的客户应用程序中的客户数据集.
  注释:
  也可以通过使用briefcase模式,使多层应用程序支持数据的离线使用.
  在网络中,应用程序通过TClientDataSet与向应用服务程序提供数据的计算
机进行通信.当某个用户退出网络时,客户数据集就在硬盘上写入数据的一个快
照.
  应用程序可以离线使用这个数据快照,这时,客户数据集就作为单层应用程序
中的平面文件数据集.
  客户数据集一般通过一个IProvider双向接口与提供数据的计算机进行通信.
在单层模式和briefcase模式中,客户数据集中的Provider接口是自动生成的.
在客户应用程序作为多层应用程序的一部分时,客户数据集得Provider通常是
作为应用服务程序的一部分的TProvider对象.从组件选项版的Data Access页
中选取几个ClientDataSet组件,并且给这些组件做上标签.
  在Object Inspector中可以注意到,ClientDataSet属性有点类似与TTable
属性,只是DataBaseName和TableName属性已经有RemoteServer和Provider-
Name属性所代替.
  将RemoteServer属性设置为ObjBrwRS,并且将ClientDataSet对象的Prov-
iderName设置为所用的表名.应该可以在ProviderName下拉列表中看到所有的
表.这些表来自于服务程序,显示这些表就说明连接正常.如果没有显示这些表,
那么可能在设计应用服务程序时忘记了把他们输出.
  接下来,把ClientDataSet的Active属性设置为True.如果这些步骤都成功了,
那么就已经完成了各个层之间的连接.在主窗体中放置一个DataSource(Main-
DS)组件,并且将她与表相连,然后再把主窗体上的Grid对象的DataSource属性
设置为MainDS.应该可以在主窗体上的Grid中看到表的内容.通过应用服务程
序,客户应用程序可以在脱离SQL数据库服务器的环境下访问表.


——原文由ifeelyou发表

--
子非鱼,安知鱼之乐?
子非我,安知我不知鱼之乐?
Please let me feel you!

※ 修改:.skyice 于 Dec 30 00:46:19 修改本文.[FROM: 202.99.82.228]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.137.225]

[关闭][返回]