网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Delphi命令行参数.
.字幕图标控件.
.再谈多态--多态的应用举例:.
.优化delphi5.0秘籍大曝光.
.用Delphi实现整个网站图片的极速.
.纸牌控件的编写(中).
.在Delphi中实现任意形状的窗体.
.将应用程序11M内存占用,降至500K.
.与文件相关Api函数列表.
.代替showmodal其他两种方法.
.在Delphi中实现动态字幕.
.TWebBrowser流程讲解及如何判断下.
.用Delphi开发DLL来代替8581协议控.
.移动无标题栏窗口.
.研究心得------->CPU信息的获得,.
.取得图片的透明区域.
.如何在状态栏中加入图标(或图片.
.捆绑执行文件新思维(第二版).
.用Delphi2005和DUnit搭建敏捷开发.
.利用Delphi编写Socket通信程序.

三层结构的设计模式

发表日期:2006-2-4


.一般简单的三层结构设计方式:

Remote Data Module服务器
 
 
 

数据库

Query组件

DataSetProvider组件

客户端应用程序

DCOM组件

ClientDataSet组件

 

 现在一般介绍三层结构大多数使用上面的数据模型进行讲解,通过DataSource组件连接ClientDataSet组件,然后通过数据感知控件连接DataSource组件,来进行对数据库数据的访问。这样就使得数据库服务器、应用服务器和应用程序之间的联系过于紧密,如果其中一个做了改动,其他的都要跟着改动,对于系统的升级与维护带来很多不便。

2.新的三层结构设计模式:

Remote Data Module服务器
 
 
 
 
数据库
Query组件
DataSetProvider组件
客户端应用程序
DCOM组件
ClientDataSet组件


上面是我们现在采用的三层结构模式,它不通过DataSetProvider组件来传递数据,而是通过Remote Data Module服务器所提供的Interface来进行数据的传递。这样就使得应用程序完全与数据库服务器没有任何关系,对整个系统的升级与维护都带来极大的好处。
对于集合数据,由于Interface的返回值可以是OLEVarient类型,因此我们可以创建ClientDataSet来进行集合数据的传递。
3.部分源程序
//函数1:创建ClientDataSet
procedure CreateCds(const Ds: TDataSet; var Cds: TClientDataSet);
var
  I: Integer;
begin
  Cds := TClientDataSet.Create(nil);
  for I := 0 to Ds.FieldCount - 1 do
  begin
    with Cds.FieldDefs.AddFieldDef do
    begin
      Name := Ds.FieldDefs[I].Name;
      DataType := Ds.FieldDefs[I].DataType;
      if DataType = ftAutoInc then
        DataType := ftInteger;
      Size := Ds.FieldDefs[I].Size;
    end;
  end;
  Cds.CreateDataSet;
end;
//函数2:给ClientDataSet负值
procedure TransData(const Ds: TDataSet; var Cds: TClientDataSet);
var
  I: Integer;
begin
  if Ds.RecordCount > 0 then
  begin
    Ds.First;
    while not Ds.Eof do
    begin
      Cds.Insert;
      for I := 0 to Ds.FieldCount - 1 do
        Cds.FielDs[I].Value := Ds.FielDs[I].Value;
      Cds.Post;
      Ds.Next;
    end;
  end;
end;
上一篇:Delphi中预想不到的代码 人气:3398
下一篇:NeHe的opengl教程delphi版(1)----基本框架 人气:5167
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐