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

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 z33 的 blog

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(事务处理),服务器响应机制和错误处理机制。

本文关键:Multi-Tier
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top