论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > DELPHI >

A450三层图书管理系统

      第四部分 毕业设计内容 内容来自论文无忧网 www.paper51.com

4.1分布式多层数据库开发简介

http://www.paper51.com

Delphi提出的MIDAS(Multi-Tierdistributed Application Services Suite多层分布式应用服务器组),是把原来Two-Tier数据连接放到了服务器端的COM组件上,客户端只剩下了执行文件和MIDAS.DLL,前台和服务器上的COM组件,通过DCOM机制互相沟通。

http://www.paper51.com

这个多的一层,称为应用程序服务器(Application Server),或者称为中间件。整个工作机制见下图: 内容来自论文无忧网 www.paper51.com

内容来自www.paper51.com

这种多层分布式工作机制,主要基于这样几点考虑: http://www.paper51.com

1)   减少客户机的维护量,因为前台程序比较简单;

内容来自论文无忧网 www.paper51.com

把企业逻辑封装在通用的中间件应用服务器中,不同的客户都可以共享同一个中间层(包括Web),而不必每个客户都单独实现企业规则,避免了重复开发和维护的麻烦。由于客户程序相当瘦(这就是现在流行的瘦客户机概念),无论是开发还是发布,都变得简单了。

内容来自www.paper51.com

2)   便于升级,当中间件升级的时候,客户程序可能不需要变化; copyright paper51.com

3)   实现了分布式数据处理,把一个应用程序分布在几台机器上运行,可以提高应用程序的性能,也可以把敏感部分封装在中间件,为不同的用户设置不同的访问权限,增强了安全性。

内容来自论文无忧网 www.paper51.com

4)   减少直接连接数据库的用户数目,减少费用。 copyright paper51.com

在Delphi 6.0上,在原来的MIDAS基础上,发展了DataSnap技术,在很多细节方面,它提供了原来MIDAS所没有的许多功能,使用上更加方便了。

内容来自www.paper51.com

DataSnap主要提供客户端和中间件之间的通信,不但支持COM+技术也支持TCP/IP或者CORBA,它们使用类似的界面和方法,其结果由程序自动完成,这就大大扩充了它的应用范围。

copyright paper51.com

必须要提醒的是,前台机器上除了应用程序以外,还必须把一个MIDAS.DLL文件复值到前台机器上,这个文件在服务器的WINNT\System32目录下。

内容来自论文无忧网 www.paper51.com

4.2服务器端程序的建立

copyright paper51.com

    服务器端程序实际上是个COM 工程,它本身连接数据源,再通过接口与客户端联系,这个COM 工程必须注册在服务器上。 copyright paper51.com

首先建立一个空白的工程,在工程里放置一个Adoconnection组件。然后再建一个远程数据模块file -> New -> Other -> Multitier-> Remote Data Module(远程数据模块)。   Coclass Name : libserver ,Instancing  :执行模式,大部分用Multiple Instance(多重实例),Threading Model:线程模式,建议用Apartment(单元),产生一个窗口,在这个窗口里,可以放入数据控件。

内容来自论文无忧网 www.paper51.com

    在Viwe -> Type Libray 中,我们可以看到这个COM 的一些特性。我们也可以记下系统提供的GUID,以备后来使用。加入一个ADOTable,并设置其指向一个数据库。再设置一个DataSetProvider(在DataAccess页)指向ADOTable,这就完成了服务器端的程序设计。

内容来自www.paper51.com

保存,编译,注册(注意,只要运行就自动在本机注册了)。

copyright paper51.com

4.3客户端程序的建立

paper51.com

    在Two-Tier模式中,客户端(Client)程序是直接和服务器的数据源相连的,而Multi-Tier模式,多个客户端连接的是一个应用程序服务器,因为收费是按客户端数计算的,所以,数据库的使用费用比较低。

http://www.paper51.com

    1)建立一个普通的工程。    内容来自www.paper51.com

2)放置一个TDCOMConnrction控件(在Datasnap页),属性:在本机注册时,可直接设置以下属性:ServerName:应用程序服务器注册名(server.libserver)   ,Connected=true。这时你可以看到服务器端的COM 程序被激活了。如果在网络上调试,需要给出服务器名:ComputerName:服务器名(自动给出网上邻居)注意: ServerGUID的GUID值是自动给出的。 copyright paper51.com

3)放置一个TClientDataSet控件(在Data Access页),属性RemoteServer= DCOMConnrction1,ProviderName:=DataSetProvider1(服务器端将被激活),Active=true (激活后将能正常连接)

内容来自论文无忧网 www.paper51.com

    4)放置TDataSource,属性:Dataset:指向cdsCustomer。 内容来自www.paper51.com

这样一个客户端程序就建立好了,其余犹如普通的数据库设计。

http://www.paper51.com

4.4  客户端实现SQL 查询

paper51.com

    由于在客户端不存在TQuery控件,似乎客户服务器模式是无法做SQL查询的。但是,Delphi很好的解决了这个问题。事实上,只要客户端连接上服务端应用程序,客户端的TClientDataSet就包含了一个名字为Provider的属性,对应到服务器端DataSetProvider的所有默认属性和方法,其中DataSetProvider有一个Options属性,只要让其中的poAllowCommandText=true,那么,DataSetProvider的poAllowCommandText就可以接受前台来的SQL 命令,并传送给TQuery。 http://www.paper51.com

    可以看出,真正传递数据的是DataSetProvider的接口,所以,用这个接口搭建传递SQL 的桥梁是必需的。客户端进行SQL 查询的方法是:

paper51.com

      ClientDataSet.Close;

内容来自www.paper51.com

      ClientDataSet.CommandText := 'SQL语句';

copyright paper51.com

ClientDataSet.Open;

copyright paper51.com

4.5 动态连接应用程序服务器的实现 copyright paper51.com

    客户端程序在运行时,需要连接应用服务器程序以取得服务。但是,在系统实际应用的时候,运行应用服务器程序的计算机是经常改变的,因此在客户端程序启动时,应该先找到运行应用服务器程序的计算机的设置。动态连接应用服务器的流程类似于12.3节的动态数据库连接,动态连接应用服务器程序的流程图14-1所示。 内容来自论文无忧网 www.paper51.com

掌握了动态连接应用服务器的流程,就可以具体实现它。下面就将分步骤介绍动态连接应用服务器的实现过程。

paper51.com

(1)               在Delphi中新建一个窗体,将单元文件保存为connect.pas窗体的Name属性设为fm_serconfig,Caption属性设为”服务器配置”,运行后窗体如下图所示。

内容来自www.paper51.com

paper51.com

(2)在“连接设置”窗体中,需要输入应用服务器主机名(或者应用服务器IP地址)和应用服务器的端口号,这些配置信息将用来连接应用服务器。如果连接成功,输入的配置信息将被写入到注册表中,以后程序启动时,读取注册表配置信息,就可而已连接应用服务器程序了。程序的具体实现部分如程序清单如下所示。 copyright paper51.com

procedure BitBtn1Click(Sender: TObject);

内容来自www.paper51.com

procedure Button1Click(Sender: TObject); copyright paper51.com

private 内容来自www.paper51.com

procedure WriteToReg(const bappHost,bappIp,aPort:string); copyright paper51.com

{ Private declarations } http://www.paper51.com

public

copyright paper51.com

{ Public declarations } paper51.com

end; paper51.com

var http://www.paper51.com

  fm_SerConfig: Tfm_SerConfig; Connected: boolean= false;   //代表是否连接成功

内容来自www.paper51.com

implementation 内容来自www.paper51.com

usesnetlist, data;

paper51.com

{$R*.dfm} paper51.com

procedureTfm_SerConfig.BitBtn1Click(Sender: TObject); paper51.com

begin copyright paper51.com

   if ((Edt_host.Text='')or (Edt_host.Text=null))

copyright paper51.com

      and((Edt_ip.Text='') or (Edt_host.Text=null))then paper51.com

   begin 内容来自论文无忧网 www.paper51.com

   application.MessageBox('请输入服务器和IP','输入错误',

paper51.com

                    mb_iconinformation + mb_defbutton1);

copyright paper51.com

   exit;

http://www.paper51.com

   end;

内容来自论文无忧网 www.paper51.com

   try

copyright paper51.com

     strtoint(edt_Port.text); 内容来自www.paper51.com

   except copyright paper51.com

      Application.MessageBox('请输入正确的端口号', '输入错误..', mb_iconinformation+ mb_defbutton1);

copyright paper51.com

     exit;

http://www.paper51.com

   end;

copyright paper51.com

   statusbar1.Panels[0].Text:='正在连接服务器,pleale wait'; 内容来自论文无忧网 www.paper51.com

   statusbar1.Refresh; 内容来自论文无忧网 www.paper51.com

   screen.Cursor:=crHourGlass; paper51.com

   fm_data.Socket.Connected:=false;

内容来自www.paper51.com

   fm_data.Socket.Host:=edt_host.Text;

http://www.paper51.com

   fm_data.Socket.Address:=edt_ip.Text;

内容来自www.paper51.com

   fm_data.Socket.Port:=strtoint(edt_port.Text); copyright paper51.com

   try copyright paper51.com

     screen.Cursor:=crdefault;

内容来自www.paper51.com

     fm_data.Socket.Connected:=true;

内容来自论文无忧网 www.paper51.com

     application.MessageBox('连接成功','图书管理系统', mb_iconinformation+ mb_defbutton1); 内容来自论文无忧网 www.paper51.com

     connected:=true; 内容来自www.paper51.com

   except 内容来自www.paper51.com

     screen.Cursor:=crdefault;

内容来自www.paper51.com

     application.MessageBox('连接失败','图书管理系统',mb_iconinformation+mb_defbutton1);

http://www.paper51.com

     connected:=false; http://www.paper51.com

   end; paper51.com

//连接成功向注册表里写入应用服务器配置信息 copyright paper51.com

  WriteToReg(edt_Host.Text, edt_IP.Text, edt_Port.Text);

copyright paper51.com

  close; 内容来自www.paper51.com

end;

paper51.com

//利用可视化窗体来选择计算机

内容来自论文无忧网 www.paper51.com

procedureTfm_SerConfig.Button1Click(Sender: TObject); paper51.com

begin 内容来自论文无忧网 www.paper51.com

edt_ip.Clear;

内容来自www.paper51.com

edt_host.Text:=   NetExecute(TFm_NetList); paper51.com

end;

http://www.paper51.com

//把信息写入注册表 内容来自论文无忧网 www.paper51.com

procedureTfm_SerConfig.WriteToReg(const bappHost,bappIp,aPort:string); http://www.paper51.com

var

http://www.paper51.com

reg:Tregistry;

copyright paper51.com

begin 内容来自www.paper51.com

  reg:=Tregistry.Create; 内容来自www.paper51.com

  reg.RootKey:=HKEY_LOCAL_MACHINE;

内容来自论文无忧网 www.paper51.com

  if not reg.OpenKey('\Software\pz',false) then //如果可以创建目录

http://www.paper51.com

  begin paper51.com

  reg.CreateKey('\Software\pz'); 内容来自www.paper51.com

  reg.OpenKey('\Software\pz',false); copyright paper51.com

  end; 内容来自www.paper51.com

  reg.WriteString('host',bapphost); copyright paper51.com

  reg.WriteString('ip',bappip);

内容来自www.paper51.com

  reg.WriteString('port',aport);

内容来自论文无忧网 www.paper51.com

  reg.Free;

paper51.com

end;

内容来自论文无忧网 www.paper51.com

end. http://www.paper51.com

打开“连接设置”配置窗口,在打开窗体之前,函数已经将布尔变量Connected设为False,而在窗体被关闭之后,将返回Connected变量的值,根据布尔变量Connected的值可以判断是否已经连接上应用服务器。 copyright paper51.com

------分隔线----------------------------
联系方式