Multi-Tier结构程序开发基础教程 (一)

原创 2003年02月12日 11:20:00

Multi-Tier结构程序开发基础教程 (一.1)
作者:z33

鉴于同学们刚接解Delphi,并对老师上课所讲的Multi-Tier结构编程不是十分理解,所以我写了下面一个教程,给我最好的同学们,希望这篇教程能帮助同学们更好的学习Delphi,不要掉队,也希望我通过写一写学习的经验,总结一下,对Delphi有更深的了解。

多层开发的基本概念我不想多说了,我只把写一下它的这实现过程。

一、首先编写应用程序服务器,这个服务器的作用是连接数据库和客户端,起到承接客户端和数据库服务器之前的桥(暂且叫它桥吧)。
  1、新建一个工程,
     File - New - Application 。
  2、再往新建的工程上放一个实现多层的“远程数据模板”(中文我觉得应该叫这个),
    File - New - Other -Multitier - Remote Data Module - 单击OK
  3、
接上一步,会出现一个对话框,
    名字起好了填上去点OK就可以了


    

    上图中,CoClass Name就是此程序的名称,叫COM的名称,这个名称最好起一个有意义名字,因为在你做客户端的时间需要依据这个名字连接到这个服务器。比如是:multi_test (意思是多层测试)或者 X_test ,好记~而且酷!。
下面灰色字这一段不需要看懂
    下面的Instancing选择服务器的处理线程方式,现在选的是Multiple Instance是指多前客户端可共享一个线程应用程序服务器。还有Single Instance是多对多的处理方式,就是一个客户端对应一个线程应用程序,当多客户端时,服务端也会开和客户端一样多的线程运行,好处是各线程相对独立,不会相互影响,但相对比较占资源。而Internal是创建一个In-Process的COM程序(DLL文件格式),这项用得比较少,据我理解是需要和其它对象兼容而设的,这是我的理解,有不同看法欢迎讨论。
     最后一个Threading Model是用它设置In-Process COM程序的多任务模式的,太多了,懒得讲了,大家自己看书吧。}


  4、 继续干!拖一个Table1组件到Form1上去,设置Table1DatabaseNameDBDEMOSTable NameCustomer.db。(这部分是基础,我不多讲了,不懂去学学前面的知识。)再拖一个DataSetProvider1组件(不要问我ClinentDataSet组件在哪个栏里,自已找!),并设置它的DataSet属性为Table1。这里DataSetProvider组是向客户端提供数据集的接口。DataSetProvider(数据集提供者),DataSet属性是设置它的数据集是什么,这里指向Table1这个数据集。弄好了这些,我们的服务器就完成了,接下来运行即可,运行的目的是让服务器在系统中注册。
(另外你也可以在Form1上添一个Label标签,标识一下,如下图:

  

  5、保存工程。

、 编写客户端应用程序
  1、新建一个工程。
    File - New - Application
  2、拖一个TDCOMConnection控件到Form1上(还是那句话,不要问我它在哪儿)。
    把它的ComputerName属性设成127.0.0.1,这里要说明一下:
    ComputerName这个属性是设置你要连接的服务器,填上127.0.0.1就是自己的机器,因为要在自己的机器上调试嘛。当然如果希望连到别的机器上也可以,当然前提是别的机器有已经做好并注册运行的Application Server ,简单说就是上面咱们做的应用程序服务器。举个例子,如果你要在我的机器上有已经做好并运行的Application Server,那么我的机器名是c2109,你就可以在ComputerName里填上我的c2109这个计算机名就可以连到我的机器操作了。当然也可以填IP地址,因为有些计算机名可能会引起错误,比如“可乐猫”的计算机名,好像就是“可乐猫”,中文名呀,你敢用吗?我不敢,还是用IP连接吧,是不是?
    然后,再去设置ServerName的属性,这个属性里面你会找到你刚才建立的服务器名称,忘了?
回去看看
  3、再拖一个TClientDataSet控件,把RemoteServer属性设置为DCOMConnection1,再把Provider属行选为DataSetProvider1。注意,当你点上Provider属性时,应用程序服务器将会被启动。(这时不要把那个服务器的窗口关掉,留着它,不然会出错!)

如下图:

  

  4、接着拖一个TDataSourceTDBGridTDBNavigatorForm1上,设置DataSource1DataSet属性为:ClientDataSet1,并把DBGrid1DBNavigator1DataSource属性设置为:DataSource1,最后把ClientDataSet1Active属性设置为:True,激活。
  5、保存工程,并运行,至此这个简单的Mulit-Tier已经好了,你学会了吗?

最终效果如图:

  



  这一节里,其实我应该讲一下ActionList的Standard action来实现DBNavigator的工能,因为本节所讲的并没能真正的实现它的ClientDataSet的ApplyUpdates的功能,也就是说不能提交数据,但现在我该睡觉了,所以剩下的留到下一节去讲吧。如果你觉得我讲的有问题,哪个地方讲错了,欢迎来找我讨论,大家一起学习,最后。。。。希望大家都能看明白。呵呵~
对了,还有就是多层的数据库异常处理,虽然老师演示了一下,但我仍然有些地方不明白,想老师新建的那一个Reconcile Error Dialog来做异常处理我觉处理没什么价值,而且不合理,等我再研究研究。:)

本节源程序下载 | 真正实现ApplyUpdates源程序下载




Multi-Tier结构程序开发基础教程 (一.2)
作者:z33

  上一节只讲了Multi-Tier的连接,其实上一节就应该把这个一起都讲了,但因为时间有限,所以分成两部分讲了,呵呵~。
  因为Multi-Tier结构和普通单机对数据库操作是不一样的,我们也就无法用单机的方法往数据库里写数据,这一节就讲一下在多层结构下对数据操作。


我们要再利用上第一节的程序,这次要往上放一些对数据操作的功能。

一、首先现在我们不用DBNavigator1,而用ActionList控件来实现数据的操作,,我们还需要自己建5个铵钮,并通过ActionList的Standard Action来实现这些功能。

  1、往Form1上放5个铵钮,再拖一个Standard控件栏的最后一个控件:ActionList控件,这个控件是帮助我们快速完成铵钮功能的控件,如图:

  

  下面我们来实现它:
    a.双击ActionList控件,出现Editing Form1.ActionList1窗口,在窗口左半部空白处点鼠标右键,再选“New Standard Action...”项,如图:
    

    b. 出现了Stand Action列表,我们在里面找到DataSet项,把这项里的所有子项都选上,再点OK,如图:
    
      
    c.再设置每个按钮的Action属性为对应的Action预置功能。如下表:

铵钮
Action属性
实现功能
Button1
DataSetInsert1
插入一条数据
Button2
DataSetEdit1
编辑当前记录
Button3
DataSetDelete1
删除当前记录
Button4
DataSetCancel1
取消当前操作
Button5
不设置
把修改写入数据库(Caption:=写入)

    d. 把每个铵钮的Caption 相对应功能的名称即可。如图:
    
    e. 双击“写入”按钮,在里面写入如下加粗的语句就可以实现向数据库提交修改:
     procedure TForm1.Button5Click(Sender: TObject);
     begin
       clientdataset1.ApplyUpdates(0);
       showmessage('已经成功写入数据库中');

     end;
    其中ApplyUpdates是ClientDataSet的方法(method),功能是提交客户端数据到服务器端,括号里的0表示发生错误的最大值为0,即不允许有错误。


到这里咱们的第一节就完了, 我该去洗洗睡了~~,这次没讲多少东西,最主要的就是那个写入铵钮的clientdataset1.ApplyUpdates(0);这个语句才能实现向数据库提交数据。
下一节讲一下Multi-Tier的Transaction(事务处理),服务器响应机制和错误处理机制。

源程序下载

Web前端开发精品课HTML CSS JavaScript基础教程CSS部分知识点总结

内容来自莫振杰Web前端开发精品课HTML CSS JavaScript基础教程章节总结 第11章  CSS简介   1、HTML是网页的结构,CSS是网页的外观,JavaScript是网页的行为。...
  • qq_29720657
  • qq_29720657
  • 2017年12月11日 10:11
  • 189

《Objective-C基础教程》学习笔记第八章

1. Fundation kit中一些有用的数据类型:常用结构体:NSRange, NSPoint, NSSize, NSRect; 常用类: NSString, NSMutableString, N...
  • guiding
  • guiding
  • 2013年02月05日 18:28
  • 360

ogre 入门教程

ogre 入门教程 先来看第一个ogre程序。 void TutorialApplication::createScene(void) { // Create your scene here...
  • cloud95
  • cloud95
  • 2015年07月22日 09:43
  • 503

《Flask development》大型程序的结构

版本库(Repository):你的应用的根目录。这个概念来自于版本控制系统,但在这里有所拓展。当提到“版本库”时,指的是你的项目的根目录。在开发你的应用时,你不太可能会离开这个目录。 包(...
  • huang5487378
  • huang5487378
  • 2017年03月27日 14:14
  • 817

Java零基础:一步步教你如何使用eclipse创建项目及编写小程序实例

新手如何使用eclipse教程
  • cj_Allen
  • cj_Allen
  • 2015年12月16日 09:45
  • 21224

J2EE企业级开发基础教程(1) - Hello World

1 Java语言介绍 1.1 Java语言历史 1995年5月23日,在SunWorld会议上,Sun公司正式展示Java语言,这一天通常称为Java语言诞生日。 1996年,Java语言发布1.0版...
  • herry16354
  • herry16354
  • 2015年03月02日 22:51
  • 660

微信小程序开发详解(三)---微信小程序工程目录结构

1:打开微信小程序开发工具,进入编辑模式,如下图1所示 图1 1:这个项目主要由pages/firstPage,pages/index,pages/logs,这几个文件夹组成,这几个文件夹...
  • aoaoxiexie
  • aoaoxiexie
  • 2016年12月15日 15:02
  • 1851

2015年最新Android基础入门教程目录(完结版)

2015年最新Android基础入门教程目录(完结版) 前言: 关于《2015年最新Android基础入门教程目录》终于在今天落下了帷幕,全套教程 共148节已编写完毕,附上目录,关于教程的由来,笔者...
  • zpj779878443
  • zpj779878443
  • 2015年11月23日 20:48
  • 54008

Revit 及 Revit二次开发入门笔记

加入BIM相关行业后,虽然是个门外汉,但是还是下决心好好钻研,尽快创造些价值。 BIM中很关键的软件Revit已下载。我下载的是2017版本,看了几节Revit视频教程,算是有了初步的了解。因为我的...
  • alexlanxy
  • alexlanxy
  • 2016年11月15日 20:24
  • 763

web前端小白入门教程

一小时学会写页面 作为一个懒癌晚期患者,总是习惯找各种简单的解决问题的方法,也习惯性把问题简单化,所以今天想分享给大家简单的web前端入门方法。 既然题目已经定了一个小时那么废话就不多说了,计时开...
  • coco510
  • coco510
  • 2016年05月06日 00:44
  • 955
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Multi-Tier结构程序开发基础教程 (一)
举报原因:
原因补充:

(最多只允许输入30个字)