第二十五章_C_Builder__应用Internet_Express的程式开发_第1页
第二十五章_C_Builder__应用Internet_Express的程式开发_第2页
第二十五章_C_Builder__应用Internet_Express的程式开发_第3页
第二十五章_C_Builder__应用Internet_Express的程式开发_第4页
第二十五章_C_Builder__应用Internet_Express的程式开发_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二十五章 应用Internet Express的程序开发我们可以轻易的使用Web接口,在客户端来取得服务器里数据库的信息,让这些信息显示在网页上面。但是如果想要将服务器数据库的数据先搬动到客户端,然后在客户端进行数据库的修改存取,接着再搬回服务器呢?感觉就复杂多了,而这就是本章所要介绍的InternetExpress所带给我们强大神奇的功能。 大纲 25-1 InternetExpress导论 25-2 实作范例说明 25-3 建置多层存取架构 25-4 整合数据查询 本章习题25-1 InternetExpress导论 不同于一般Two-Tier的架构,InternetExpress提供了

2、另外一种的数据库存取方式。应用程序取得数据库服务器的数据,经由InternetExpress所提供的服务,将取得的数据转换成XML格式的网页,然后再传送给客户端去浏览这个网页,并且提供了可以编辑的接口。对于使用者而言,他只需要去编辑者个网页接口的内容,这个编辑完的内容将会被利用JavaScript以更新的方式将被修改过的数据再写回数据库。 所以说,等于是客户端把数据库数据般出来,改一改,再全部搬回去。这大概就是InternetExpress的精神所在了。C+ Builder开发环境下,在Internet Express这个组件面版分类里有两个组件,分别为:XMLBroker和InetXPage

3、Producer。 InternetExpress和一般数据库动作的差异一般Two-Tier架构下,客户端进行五个updata更新动作的示意图。 在InternetExpress概念下,进行五个update更新动作的示意图。 用户端取得数据集 用户端编辑取回的数据集 用户端回存数据集到数据库服务器25.1.1客户端取得数据集由于现在我们在客户端所要使用的浏览工具,就是一般的网页浏览器;对于网页浏览器而言,根本不可能辨识ClientDataSet组件所提供的数据,所以我们可以知道,如果要使用这种方式来存取数据库,一般的C+Builder所提供的方式是行不通的。所以这个时候,XMLBroker的出

4、现就是为了要面对这个问题,这也是InternetExpress作为信息传递最重要的概念。 XMLBroker所要处理的事情,跟ClientDataSet的作用是很类似的。由于现在客户端所使用的应用程序是网页的浏览器,所以最便利的数据结构的格式就是把所有的取得信息转换成为XML的格式。于是在把数据传给客户端之前,必须要先做转换的动作,而这个动作就是由XMLBroker组件所负责的。 在internetExpress架构下,可以是两层(Two-Tier)的或是多层(Multi-Tier)的存取结构。在两层结构下,数据存取组件、数据提供者、和XMLBroker组件都和WEB应用程序放在一起;而多层的

5、存取架构下,数据存取组件、数据集提供者则是放到应用程序服务器里,而在Web应用程序这边,则包含了XMLBroker和DataSnap这两个组件。 25.1.1客户端取得数据集 XMLBroker组件主要用于处理两件事 从资料提供者或应用程序服务器那边取得数据库的数据,并且在取得这些数据以后加以处理成为XML格式的数据结构 当用户端使用浏览器将这些XML格式的数据做完更新以后,XMLBroker必须负责接收这些被更新的数据然后再传给数据库系统去做相对应的处理 XMLBroker的重要属性屬性名稱 說明 RemoteServer 指定建立連線到應用程式伺服器的元件名稱,這是在Multi-Tier多

6、層架構下才需要指定的,一般兩層架構可以忽略。 ProviderName 指定資料集提供者,對於兩層式架構,可以直接從這個屬性選取資料集提供者,若是多層式的存取架構,則需要經由RemoteServer屬性指定應用程式伺服器了以後,才可以用選取的方式指定這個屬性。 MaxRecords 每次轉換的資料最多可以有多少筆,這可以避免過多的資料集一次傳給用戶端,這樣對於用戶端和網路頻寬都會造成很大的負擔。但是如果我們是針對小型的資料庫的話,就可以把這個值設定成為-1,這樣一次就會把伺服器所有的資料集一口氣傳給用戶端。 Params 當資料集透過動態查詢或呼叫預存程序取得時,可以使用這個屬性來指定條件參數

7、值 XMLBroker的重要事件事件名稱 說明 AfterDispatch 當XMLBroker處理完請求的對應動作時,此事件就會發生。 BeforeDispatch 元件收到資料更新的請求,這個事件就會發生,藉由這個事件的發生,來處理請求的對應動作。 OnGetErrorResponse 當資料的更新動作發生錯誤的回應,此時此件事就會發生。 OnGetResponse 當此事件發生時,表示資料順利的被更新了。 OnRequestRecords 當XMLBroker需要從資料提供者端取得新的資料時,此事件就會發生。 OnRequestUpdate 正在執行資料更新的時候,這個事件就會發生。 2

8、5.1.2 客户端编辑取回的数据集InternetExpress分类里的另外一个组件InetXPageProducer了,此组件可以建立网页画面,利用这个组件,程序设计师可以链接到XMLBroker组件来取得数据集,然后藉由这些取得的数据集来产生相对应的编辑字段。 要产生的网页接口是由InetXPageProducer组件负责的,当我们要设定网页内容的样板格式时,就去设定该组件里的HTMLDoc属性,也就是说,我们可以先在HTMLDoc属性里指订网页的基本外观和格式,如背景,插图,或是题字等等(右图为编辑画面)。 25.1.2 客户端编辑取回的数据集除此之外,InetXPageProducer

9、也提供了一个类似于FrontPage的编辑网页接口Web Page Editor,在InetXPageProduce组件上面按下鼠标右键就可以点选开启了,其画面有分两个部分:HTML就是显示HTML原始码的画面,Brower就是显示浏览器处理这些HTML码的时候,所会显示的画面,如右图25.1.3客户端回存数据集到数据库服务器 当使用者编辑完了这些来自XML格式的网页以后,将要回传给数据库服务器做更新,在InetnetExpress里,是利用JavaScript语言来整合网页数据和数据库数据,加上一些附加的功能。所以说,真正处理数据的是交给JavaScript语言来处理,而程序设计师并不需要真

10、的会编辑JavaScript语言,因为这都是要交给C+Builder来做的。最后透过JavaScript就可以把更新的数据套到数据库的数据,最后再统一格式送回给服务器。25-2 实作范例说明本范例里所使用的数据库系统为MircoSoft Access,运用的数据库存取组件为ADO系列组件。一开始先在Access环境里编辑好一个简单的通讯簿,如图,名为AddressBook。这个数据表里面有五笔数据,纪录了简单的个人信息。 实作范例说明-1 但是在我们开始使用C+Builder开发之前,要先把网络服务器的环境设定好。由于InternetExpress技术是透过JavaScript来进行数据处理的

11、动作,而这些JavaScript原始码,都可以由InetXPageProducer来自动产生,而这些自动产生出来的原始码将会呼叫一些C+Builder所提供的函式库,所以我们必须要把这些函式库放到IIS的有效目录内。 这些函式库是放在C+Builder安装好的目录下的SourceWebMidas子目录内,我们可以把这个目录的内容都搬到IIS的根目录下。 本范例环境设定如下: IIS的根目录为C:wwwroot C+Builder的安装目录为E:CBuilder6 实作范例说明-2 除了可以把E:CBuilder6SourceWebMidas下的档案都搬到C:wwwroot下的某个子目录以外,我

12、们也可以有以个比较技巧的做法, 只需要在IIS设定里,设定一个虚拟目录到E:CBuilder6SourceWebMidas就可以了。 因为InternetExpress服务是使用CGI的格式由服务器发送信息给客户端,所以接下来就是要修改IIS的设定,使其可以执行CGI程序,进入默认网址的内容选单 将根目录权限的Script Acess选项勾选,并且在执行权限的下拉选单选择也可以执行执行档。 实作范例说明-3 接着我们就可以开始项目开发的动作在C+Builder环境下,新增一个项目。专案的类型为Web Server Application,型态为CGI Stand Alone Executabl

13、e,我们将会有一个空白的项目。接着开始要加入组件了,首先我们需要使用ADO组件来链接Access的mdb档案数据库,所以我们需要组件ADOConnection和ADOTable。在ADOConnection的ConnectionString属性里链接到mdb档案 当资料库档案连结成功,设定ADOTable的组件里的Connection属性为ADOConnection1。然后把TableName属性指定为AddressBook,并且之后把Active属性设定为True。 把Data Access分类标签里的DataSetProvider组件拉进项目里。然后把DataSet属性设定成ADOTabl

14、e1。 把XMLBroker的ProviderName设定为DataSetProvider1了,别忘了这时要把Connected属性改成True。 实作范例说明-4下一步,就是要开始建构处理完的数据所要显示的网页接口,也就是InetXPageProducer组件此时要拉进项目的时候了。在 InetXPageProducer组件图标上面按下右键,点选Web Page Editor就可以开启编辑选单,如图。在左边的分页里按下鼠标右键,点选New Component,选取DataForm选项。接着点选左边分页里新出现的DataForm1再按下选单里的NewItem选项(选单图示的第一项)。然后按下C

15、trl键点选DataNavigator和FieldGroup,新增这两个选项。 实作范例说明-5在FieldGroup1的属性XMLBroker里设定成XMLBroker1,而DataNavigator1的XMLComponent属性设定成FieldGroup1。 实作范例说明-6 接下来在InetXPageProducer1的IncludePathURL属性,要设定函式库目录,也就是我们刚刚所设定的虚拟目录WebMidas。如: http:/localhost/WebMidas 这个设定是给客户端浏览器看的,也就是说如果设定如上是localhost的话,那么只有服务器本身的浏览器可以开启,其

16、他计算机的浏览器将无法找到,所以这里如果是真的要透过网络来提供InternetExpress服务的话,就要设定实体位置。 实作范例说明-7InternetExpress的架构已经完成了,现在要做的就是修饰的部分 在Web Page Editor的左上框里,将鼠标移到DataNavigator1上面,再按下右键选取New Component就可以选择各式各样的功能钮的功能,如删除,下一笔数据,更新.等等。 把这些功能都选取然后新增,然后在Web Page Editor的下面框就可以点选按钮,修改其属性。如笔者如果修改了Apply Updatas按钮的Caption属性成为更新数据库,结果如下图:

17、 实作范例说明-8最后,就是要测试cgi程序是否能够顺利执行。在Project选单里Build好这个项目,然后把产生的执行档案放到IIS的根目录范围下。如将执行档ch26_001.exe放到C:wwwroottemp子目录中。然后到另外一台有网络的计算机上面使用浏览器开启这个执行档 ,如果成功,如图的画面就会出现了。25-3 建置多层存取架构 在比较大型的数据库网络系统下面,我们会希望把服务器端分开来,一是应用程序服务器提供数据库模块,另一是单纯的Web应用程序服务器用来放置InternetExpress的执行程序。 这个Web应用程序服务器可以利用DataSnap的组件来和数据库取得联机。这

18、样子的架构,就可以把数据库和网页处理的动作分开到两台不同的机器了。 多层存取架构范例 本范例使用Access的mdb档案作为数据库,需要建立两个BCB的专案:一是应用程序服务器,用来链接数据库并且把数据库的信息提供给InternetExpress项目作为数据源另一个项目就是InternetExpress的项目,使用CGI的格式,让客户端使用浏览器来开启。 多层存取架构范例- 应用程序服务器的建立 1首先建立一个example.mdb的范例数据库,数据库里面有一个Person数据表,是个简单的个人资料记录,如下图: 多层存取架构范例- 应用程序服务器的建立 2有了这个数据表以后,我们就开始建立B

19、CB的专案了。首先我们可以先建立一个普通的Application专案,在Form1里随意编辑一个简单的画面,如下图。 多层存取架构范例- 应用程序服务器的建立 3 接下来就要开始重要的步骤了,我们在这个项目里加入一个Remote Data Module模块,从工具栏的File里的New选项,选择Other分类,然后再Multitier页签里可以找到这个模块,这里我们会被要求输入这个模块对象的命名,笔者命名为RDMObj25_2。而这个项目就是要利用这个模块来提供给InternetExpress项目数据库资源。 后我们就可以在这个模块上,加入链接数据库必要的组件,首先我们先加入ADOConnec

20、tion组件,在组件功能列的ADO页签里。加入后在组件图标上用鼠标点选两次,开启数据库链接的对话框。 多层存取架构范例- 应用程序服务器的建立 4选择Jet 4.0 OLE DB Provider来连结mdb数据库 指定mdb档案的路径和档案 多层存取架构范例- 应用程序服务器的建立 5现在我们链接好数据库了,下一步就是拉入ADO页签里的ADOQuery组件,组件的Connection属性当然就是指定为ADOConnection1。 编辑SQL属性,这个属性里我们输入SQL的语法,告诉ADOQuery组件我们需要的数据表和数据字段。 如图显示然后把Active属性改成true,这样查询数据表的

21、动作就告一段落。最后一个我们需要的组件,就是Data Access页签的DataSetProvider组件了,将这个组件拉进项目里,然后把其中的DataSet属性设定为 ADOQuery,如此就完成了应用程序服务器的所有动作了。 多层存取架构范例- InternetExpress服务器建立 1 现在我们有了应用程序服务器提供数据库服务,就欠一个WEB服务器来提供CGI服务了,在这里我们必须要在另外开启一个新的项目。这个项目的型态和上一节所介绍的相同,就是Web Server Application分类里的CGI Stand-alone executable型态项目。 开启好了新项目后,首先要做

22、的就是跟刚刚完成的数据库服务器链接,这个时候就需要DataSnap页签里的DCOMConnection组件了,当然我们也需要加入InternetExpress页签下的XMLBroker和InetXPageProducer两个组件。 多层存取架构范例- InternetExpress服务器建立 2在DCOMConnection组件里有一个属性:ComputerName,这是用来指定网络上的计算机哪一台是应用程序服务器,如果是在同一个网域下的话,可以直接指定该计算机在网络上的名称,或者我们也可以直接指定IP 当这个指定动作无误以后,在ServerName属性,就能看到RDMObj25_2这个选项了

23、,我们就指定这个选项。 把Connected选项设定成True了,这个时候本项目就会去做链接应用程序服务器的动作了,如果连结成功,那么在应用程序服务器的主窗体画面就会出现 多层存取架构范例- InternetExpress服务器建立 3在XMLBorker1组件的RemoteServer属性,选定为DCOMConnection1,然后在ProviderName属性设定成DataSetProvider1,这个DataSetProvider1组件就是应用程序服务器的组件。然后将Connected属性设定成true 开始设定InetXPageProducer组件选择选单上的Web Page Edit

24、or,然后加入一个DataForm,并在此DataForm1里再加入DataNavigator和DataGrid组件,把DataGrid的XMLBroker属性选择XMLBroker1,DataNavigator的XMLComponent属性指定为DataGrid1把这两个组件的Field都加入到项目里以方便修改 多层存取架构范例- InternetExpress服务器建立 4最后一个步骤,就是在工具栏的Add New里,新增一个WebActionItem组件,把该组件的default属性设定成true,并且把Producer属性设定成InetXPageProducer1组件。 把Build好

25、的执行档放到IIS的有效目录范围内。我们可以开始利用客户端浏览器来观看CGI执行的结果。 25-4 整合数据查询 在数据库里面,某些重要字段是可以有关联的(relation),这先关联可以透过关键值(Key)来做连结。 这样的连结和读取的动作,可能会取出大量的数据库数据造成读取的负载提高 本节我们将要介绍,如何使用InternetExpress的架构来一次读取不同的数据表单。 整合数据查询范例本节的范例先利用Access建立一个范例数据库db1.mbd。这个数据库里将会有两个数据表,一个是纪录学生的基本数据Personal数据表,另外一个是学生的学期成绩Grade数据表 所以我们现在有两个数据

26、表,这两个数据表里面共同拥有有具有单一性质的字段就是姓名(Name)和学号(sn),由于名字有可能再以后数据库扩大的时候出现重复的情形,所以在此笔者选择用学号来当做关键值。而建立关联的动作,虽然Access本身也有提供,但我们留在BCB再作动作。 整合数据查询范例-应用程序服务器的建立 1本节的范例将会和前一节一样,建立的是多层的存取架构,但是加入多窗体整合的实作。 首先要做的就是先建立应用程序服务器,做法和前一节的一样,我们可以先新开一个普通的项目,然后加入一个Remote Data Module,命名为RDMObj25_3。然后加入ADOConnection组件用来链接数据库。到这里为止,

27、动作都和上一节的范例是相同的。加入ADO页签里面的ADODataSet组件两个到项目里,每一个个别负责一个数据表的资料。所以这两个组件的Connection属性都设定成ADOConnection1。 因为有两个数据表,一个是Personal,一个是Grade,在此让ADODataSet1组件负责Personal数据表,而ADODataSet2组件负责Grade数据表。 整合数据查询范例-应用程序服务器的建立 2在ADODataSet1的CommandText属性,在编辑框里写入: Select * From Personal另外在ADODataSet2的CommandText属性写入: Sel

28、ect * From Grade如此一来ADODataSet1将会透过ADOConnection1链接到数据库并取出数据表Personl的所有字段,而ADODataSet2也同理取出Grade的所有字段了。把DataAccess页签里的DataSource组件加入项目里,我们需要这个组件来做数据表结合的动作(Join)。将DataSource的组件的DataSet属性指向ADODataSet1,然后再把ADODataSet2的DataSource属性指定成DataSource1,如此一来,我们就可以以ADODataSet1组件所处理的Personal数据表为基准,加入ADODataSet2组件

29、所负责的Grade数据表的资料了。 整合数据查询范例-应用程序服务器的建立 3在ADODataSet2的MasterFields属性开启编辑窗,我们就可以看到如图的画面了,左边为Detail Fields右边为Master Fields,所谓的Master Fields就是主要的字段,在这里就是ADODataSet1所负责的Personal数据表的资料,而Detail Fields就是透过连结加入进来的字段,就是ADODataSet2所负责的Grade数据表。 在MasterFields里选择sn,在Detail Fields里也选择sn,然后按下Add,那么Joined Fields里就会加

30、入sn这个关键值连结关系了。 整合数据查询范例-应用程序服务器的建立 4 完成了与数据库的动作,我们需要把这些数据库的信息提供出去,就又需要加入DataAccess页签的DataSetProvider组件了。在DataSetProvider1组件的DataSet属性,指定为ADODataSet1(非ADODataSet2,因为ADODataSet1负责的才是Master Fields)。 应用程序服务器已经完成了,接下来就是建立InternetExpress服务器。 整合数据查询范例-InternetExpress服务器的建立 1 在这里,我们所要建立的InternetExpress服务器,和上一节所要建立的很相似 ,需要加入的组件依然是以下三个 :DCOMConnection,XMLBroker,InetXPageProducer DCOMConnection1组件的Computer Name属性指定刚刚才完成的应用程序服务器的网络名称或网络位置,然后ServerName就设定为RDMObj25_3 (可用选的)。将XMLBroker组件的RemoteServer属性指向DCOMConnection1组

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论