delphi三层架构学习

来源:互联网 发布:天津河东区淘宝街 编辑:程序博客网 时间:2024/05/17 08:05

服务端注意的是:我目前只知道用regsvr32.exe命令注册编译的服务器端dll文件,然后如果通过socketconnection组建建立中间层服务器和客户端连接,则需要在中间层运行delphi\bin\scktsrvr.exe文件,运行socket服务 这样客户端才能够通过socket找到服务端,也可以用dcomconnection组件代替socketconnection 这样不需要额外运行scktsrvr

------------------------------

Delphi三层架构的一种方法
                             Parameter:Name          Type            Modifier
                                              SQL             BSTR           [in]                 输入类型字符型
                                             result           VARIANT*    [out,retval]      输出类型,结果
function TRDM.ExecSQL(const SQL: WideString): OleVariant;
var
   adoqrytem:TAdoQuery;
   prvtem:TDataSetProvider;
begin
   adoqrytem:=TAdoQuery.create(self);           //创建临时adoquery
   adoqrytem.connection:=conn;
   
   prvtem:=TDataSetProvider.create(self);        //创建临时datasetprovider
   prvtem.DataSet:=adoqrytem;
   adoqrytem.Close;              //执行sql
   adoqrytem.sql.clear;
   adoqrytem.sql.text:= SQL;
   adoqrytem.open;
在使用DataModel窗体存放数据库控件的程序中,应注意:
1、如果在其他窗体中调用DataModel中的控件必须在先引用Datemodel的单元,在implementation下面加入以下语句

uses

     DataModel的单元名称;

2、必须改变窗体的创建顺序,datamodel窗体必须先于引用该窗体控件的窗体创建
三层结构

应用层:
一、需要三个数据控件:
Adoconnect        
AdoQuery
DataSetProvider

二、联接顺序:
SQL数据库<--Adoconnect<--Adoquery<--DataSetProvider

三、属性设置:
Adoconnect:      1、ConnectionString
                  2、Connected
Adoquery:         1、connection
                  //2、Active
DataSetProvider: 1、DataSet
                  2、option.poAllowCommand:=true
四、其他
1、运行SocketServer并开端口
2、数据模块使用远程数据模块

客户端:
一、基本控件
SocketConnection
ClientDataSet
DataSoure
DBGrid

二、联接顺序:
应用层<--SocketConnection<--ClientDataSet<--DataSoure<--DBGrid

三、属性设置:
SocketConnection: 1、Adrress
                   2、ServerName
                   3、Port
                   4、connected
ClientDataSet:    1、RemoteServer
                   2、CommandText
                   3、ProviderName
                   4、Active
DataSoure:        1、DataSet
DBGrid:           1、DataSoure

四、其他


一、先关闭记录集后执数据库操作语句
    rs.close
    sqlstr="insert into abc(a,b,c) values("a","b","c")"
    rs.open sqlstr,conn
    rs.update
    rs.colose
二、在可能发生出错的数据库操作做错误捕捉,如:open,update,delete等
    rs.close
    sqlstr="insert into abc(a,b,c) values("a","b","c")"
    on error resume next 
    rs.open sqlstr,conn
    if err then
    msgbox(err.Description)
    msgbox(cstr(err.number))
    rs.update
    rs.colose
----------------------------------------------------
所谓的三层数据库,就是在服务器端放置一个中间层,本实例使用Remote Data Module(远程数据模块)创建,3层的好处就是把一些功能放在中间层,这样当某些功能发生转变时,既不用修改数据库,也不用修改客户端,只要修改一下中间层就可以了啊。  

 1.  首先让我们来编译服务器端,打开Delphi7,新建一个标准工程,创建一个新窗体。   选择File菜单 -> New -> Other -> Multitier -> 选择Remote Data Module(远程数据模块) ->点"OK",进入到 " Remove Data Module Wizard " 向导对话框,在其Coclass Name 输入server.,其他选项选择默认值,点击确定按钮即可。   这样会产生一个窗体,在这个窗体里,我们可以添加数据库控件和数据库连接。这里我们介绍一下ADO控件,ADO控件是目前数据库开发中应用的主要空间之一,Delphi在对其提供了良好的支持,使用ADO连接数据库相当简单,我们先在窗体里加入一个ADOTable控件,设置其属性contectionstring,在弹出的对话框点击"Build"按钮后,弹出"数据库连接属性"对话框,设置其连接一个数据库,点击"测试连接"可测试连接是否成功。

2. 再加入一个DataSetProvider控件,设置其属性DataSet指向ADOTable。这就完成了服务器端的程序设计,保存、编译。

3.   接下来让我们来编译客户端,打开Delphi7,新建一个标准工程,创建一个新窗体。   在新窗体上,添加一个TDCOMConnrction控件(在Datasnap页),其属性设置:   ComputerName:服务器名(点击自动给出网上邻居)   ServerName:应用程序服务器注册名(Project1.server),ServerName 选择后,ServerGUID会自动输入GUID值。   Connected=true 为激活,在调试的时候,如果是在Windows xp本机的情况,可以先运行Project1.exe,然后就可以在ServerName中找到project1. server 了,然后设置Connected=true 激活。  

4.  再添加一个TClientDataSet控件(在Data Access页),其属性设置:   RemoteServer:DCOMConnrction1   ProviderName: DataSetProvider1(服务器端将被激活)   Active:true (激活后将能正常连接)   添加TDataSource控件,设置其属性DataSet指向ClientDataSet1。   添加TDBGrid控件,设置其属性DataSource指向DataSource1。   这就完成了客户端的程序设计,保存、编译。这样一个三层数据库构架就基本完成了,我们可以在客户端添加数据显示控件,设置同普通数据库连接设置相同。

 

以上所需控件:

    服务器端: DataSetProvider(Data Access), ADotable

    客户端:TDcomConnection(DataSnap), TClientDataSet(Data Access) , DataSource, DBGrid.

------------------------------
delphi 三层架构简单例子  2008-12-11 15:20:07|  分类: 程序设计 |  标签: |字号大中小 订阅 .

所谓三层:

(1) 客户端

(2) 服务器端

(3) 数据库

    在数据访问时,使得客户端必须通过服务器来访问数据库。提高了系统的安全性。

    在Delphi中可以使用Socket或者Dcom来连接他们相互间的通讯。如果使用Scocket在系统使用时必须提供Scocket连接器,而Dcom则不用。客户端和服务器的连接需要Broker来联系。

环境为winxp sp2 + delphi 7 + db7.(MSSQL2000)

创建过程:

1、请不要新建application.file-new-activex-activex library,file --new--other,选择"Multitier"--"Remote data module"。在跳出来的对话框里面输入名称(任意),例如:AppSqlConn。选择确定,进入remote data module窗口。

2、加入组件:adodataset,点击connectionstring属性,点击后面的…,进入设定连接窗口。选择:use connection string--build,在提供程序中选择:"Microsoft ole db provider for sql server",在连接中:服务器名称输入sql server的ip地址,登录信息中输入用户名和密码(sql server),在选择数据库中选择自己想要使用的数据库。一般只要地址正确、用户名和密码无误,肯定可以连接通过。确定退出

3、在commandtext中点击后面的…,进入sql 语句设定,根据自己的要求设定。

4、将active属性设置为true。只要前面的设定是正确的,这里应该顺利通过。

5、加入组件:datasetprovider。设定其dataset属性为上面的adodataset。

6、到此服务器端已经设置完成。请保存并且运行一次,从而使服务注册。

7、运行delphi的bin目录下面的scktsrvr,因为下面要使用socket连接。运行后任务栏中出现socket server的图标。

8、新建程序(application),然后file--new--data module,会创建客户端的data module。

9、加入组件:socketconnection,在address中输入sql server的ip地址,然后在servername中输入刚才创建的remote data module的服务程序。程序会自动在serverguid中加入id。然后选择connected属性为true。只要此处不报告错误,此程序基本成功了。

10、加入组件:clientdataset,选择remoteserver属性为socketconnection,选择providename为服务器程序的datasetprovider。然后选择active属性为true。

11、到程序的form窗口状态,首先选择file--use unit,选择上面创建的data module,确定。然后加入组件datasource和dbgrid。选择datasourece的dataset属性为data module的clientdataset,选择dbgrid的datasource为这里的datasource组件。现在应该可以看到dbgrid的窗口中出现了想要的数据。保存并且编译客户端程序。

12、客户端分发软件设定。从服务器端拷贝midas.dll文件到本机的system(98)或者system32(2000),一般自己就可以注册,否则用regsvr32 midas.dll注册一下。然后将刚才客户端程序拷贝过来运行一下,应该可以正常运行。

还有拒绝访问的错误我也碰到过,是没有打开borland socket server,该程序是borland/bin/scktsrvr.exe

注册服务器端时应该使用 run-install mts objects安装到组件服务里,安装完后可以在

控制面板-组件服务里找到服务器的GUID,然后填到borland socket server里就可以了。

如果需要code的话,请发mail到tech@chinajstar.net

以上转自http://www.richsearch.com/search/displ.aspx?lid=3291984

scktsrvr.exe是一个NT的服务程序,你用scktsrvr.exe -install安装之后,每次系统启动,它都会自动运行的。如果你的客户端用了socketconnection,每次连接应用服务器的时候,都需要通过scktsrvr.exe才能访问到你的应用服务器.

scktsrvr.exe -uninstall 即可卸载

midas.dll是个什么文件?

1.数据库三层的文件.

2.TClientDataSet小家碧玉,恐怕人人都喜欢使用。但是,都知道娶TClientDataSet是有代价的,因为你同时也得面对丈母娘MIDAS.DLL。

3.delphi用来设计多层应用程序的动态库,用来作客户端和服务器连接和处理。

4. Multi-tier distributed application service

   多层分布式开发服务

   midas.dll是它运行时需要的动态连接库。

5.你安装好delphi时装在system32里的,delphi的一个DLL.

能不能使用TClientDataSet又不用MIDAS.DLL呢?

很简单,就是uses一下MidasLib单元!

MidasLib单元在Delphi6中才有,是Lib目录下的一个dcu文件。一旦在你的源程序中引用了MidasLib单元,程序运行时就不再需要MIDAS.DLL文件。

然而,编译后程序大小一定会增加200k以上,即使使用包编译模式。

0 0
原创粉丝点击