不写一行代码,绿色三层我也行

摘要:
现在让我们开始。不仅没有华丽的词汇,甚至连词汇都不专业,因为我只是个初学者。

http://www.cnblogs.com/zhqian/archive/2010/07/06/1771798.html

没有一行代码的三层,功能肯定非常的简单,但是,再简单,我们也三层了,学习一个东西,需要从入门开始就有兴趣,如果入门就给吓怕了,哪么后来何来信心学习呢?现在就让我们开始吧,不只是没有华丽的词语,而是连用词都不专业,因为,我也只是一个入门者。

  我所用的版本为:Embarcadero® Delphi® 2010 Version 14.0.3593.25826

  一、让我们 file->new->other ,再选 datasnap server ,或者F6,输入 datasnap不写一行代码,绿色三层我也行第1张不写一行代码,绿色三层我也行第2张

如图,我们有两个可选项

   datasnap server :选择这一项,我们得到的将是一个独立EXE的三层服务器应用程序(TCP及HTTP两种模式)

   datasnap WebBroker application :选择这一项我们得到的是一个基于ISAPI的程序,需要把程序发布到IIS 等上面才可以运行

 选择第一基的配置方便,但是如果并发访问量大的话,需要编程者的水平高才可以,选择第二项则配置麻烦,但是由于HTTP 是无连接模式,理论上对并发量的控制都交给了IIS了,而不是我们的应用程序了(本处如果说得不对的请指点,谢谢!)

现在我们选择第一项

出现如下图所示的界面:

不写一行代码,绿色三层我也行第3张

应用程序类别(you may select from one of the following applition types):

分别为

 VCL应用程序

控制台应用程序

服务应用程序

需要选择哪一项,就看你自己的需求了

服务类别(you may select from one or more communication protocols):

可选TCP,HTTP,或者TCP+ HTTP ,也就是同时支持TCP及HTTP

http下面有一个 authentication,按字面意思是需要认证吧,具体细节,还来不及去研究

是否包含简单类:add server methods class

当然要包含拉,不然我们自己去写,很麻烦的

 ancestor(先辈),是指从什么模块继承下来,我们分别把各个的上层列出来,你就知道该选什么了吧

 TPersistent:TServerMethods1 = class(TPersistent)--> TPersistent = class(TObject)

TDataModule:  TServerMethods1 = class(TDataModule)-->TDataModule = class(TComponent)--> TComponent = class(TPersistent, IInterface, IInterfaceComponentReference)--> TPersistent = class(TObject)

 TDSServerModule:TServerMethods1 = class(TDSServerModule)--> TDSServerModuleBase = class(TProviderDataModule)--> TProviderDataModule = class(TDataModule)-->TDataModule = class(TComponent)--> TComponent = class(TPersistent, IInterface, IInterfaceComponentReference)--> TPersistent = class(TObject)

包含简单示例:include sample methods

可选可不选,如果你已经熟悉了的,哪就没有必要选拉

该选什么,自己跟据能力及需求定吧,现在我们就都选默认项,点ok下一步吧!

 自动生成了三个模块,第一二个上面空白的,第三个则如图

不写一行代码,绿色三层我也行第4张不写一行代码,绿色三层我也行第5张

我们再看看生成的单元内容是什么

不写一行代码,绿色三层我也行第6张unit ServerMethodsUnit1; 
复制代码
1 unit ServerMethodsUnit1;
2
3  interface
4
5  uses
6 SysUtils, Classes, DSServer;
7
8  type
9 TServerMethods1 = class(TDSServerModule)
10 private
11 { Private declarations }
12 public
13 { Public declarations }
14 function EchoString(Value: string): string;
15 end;
16
17  implementation
18
19  {$R *.dfm}
20
21  function TServerMethods1.EchoString(Value: string): string;
22  begin
23 Result := Value;
24  end;
25
26  end.
复制代码
不写一行代码,绿色三层我也行第6张
复制代码
1 unit ServerContainerUnit1;
2
3  interface
4
5  uses
6 SysUtils, Classes,
7 DSTCPServerTransport,
8 DSServer, DSCommonServer;
9
10  type
11 TServerContainer1 = class(TDataModule)
12 DSServer1: TDSServer;
13 DSTCPServerTransport1: TDSTCPServerTransport;
14 DSServerClass1: TDSServerClass;
15 procedure DSServerClass1GetClass(DSServerClass: TDSServerClass;
16 var PersistentClass: TPersistentClass);
17 private
18 { Private declarations }
19 public
20 end;
21
22  var
23 ServerContainer1: TServerContainer1;
24
25  implementation
26
27 uses Windows, ServerMethodsUnit1;
28
29 {$R *.dfm}
30
31 procedure TServerContainer1.DSServerClass1GetClass(
32 DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass);
33 begin
34 PersistentClass := ServerMethodsUnit1.TServerMethods1;
35 end;
36
37 end.
复制代码

我们在本文章中,并不做深入的介绍,因为如果要把相关的介绍完,估计已经是一本书的一个大章节了,而且对一些细节我并不了解,误导了朋友们不是好事,同时再次提醒各位,看我的文章请别以完全相信的心态去看,因为我说的,并不一定正确

  把form1的标题改为你想要的标题:如 datasnap SERVER,然后再加上其它界面上显示的,比如我现在加一个lable,内容写上:datasnap 服务器端已运行,并调字号到适当的大小

 先把我们的程序做个简单的保存吧,由于是DEMO,我也力求简单,所以数据库也放在同一目录,且设置成固定的参数

其它也默认,工程名称就叫做datasnapdemo1SRV吧

选用什么数据库好呢,对于工作在非MS 平台上的人,很多都排斥MS的产品,不过我总是认为,MS的东西做的很好的,他不一定很强大,但是应该很易用,今天的数据库及连接组件,我们也不选DBX及其它的数据库,DBX+FB可以绿色,但是估计会FB的朋友数量并不是很多,我们就用简单的ACCES+ADO 吧

   现在我们就用ACESS 来建一个库,DB.mdb 然后生成一个表名为TEST,有两列,分别为 id 数字,Vname 文本,ID为主键

   并且输入一列值  1 周黔

 在 ServerMethods1 上面放上ADO相关的控件,并连接到ACCESS

 ADOConnection1

    loginprompt为:false

    connectionstring为:(注:下面是自动生成的连接串,你也自动生成一个吧,应该会看我文章的所有人都会这个操作的

不写一行代码,绿色三层我也行第6张
复制代码
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=db.mdb;Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;
复制代码

connected为true

ADOTable1

connection为ADOConnection1

tablename为:test

active为:true

DataSetProvider1

dataset为:ADOTable1 

 不写一行代码,绿色三层我也行第15张

设置完成了,现在我们记下DSTCPServerTransport1的prot值

ServerMethodsUnit1中的: TServerMethods1 = class(TDSServerModule) ,如果TServerMethods1给你改成了其它的代码了,则需要记住对应的代码

以上两个值一会儿在客户端要用到

编译并独立于IDE运行服务器端吧

运行后如图:

不写一行代码,绿色三层我也行第16张

 

保持服务器端不要关闭,让我们开始客户端的编程吧

 file->new-> vcl for the application 打开一个应用程序

把FROM的标题改成:datasnap client

放上一个 SQLConnection1

loginprompt为:false

   把derver 改成:Datasnap 然后点derver前的+号

        hostname 输入  127.0.0.1

         prot 设置与服务器的相同,默认为211(刚刚服务器上要求记住的)

放上一个DSProviderConnection1

   sqlconnection为:SQLConnection1

serverclassname 为: tServerMethods1(刚刚服务器上要求记住的)

把 SQLConnection1的connected 设置为true

放上一个ClientDataSet1

RemoteServer设置为:DSProviderConnection1

providername 设置为:DataSetProvider1

active设置为:true

放上一个:DataSource1

 dataset设置为:ClientDataSet1

放上一个:DBNavigator1

DataSource设置为DataSource1

放上一个DBGrid1

 DataSource设置为DataSource1

现在保存客户端为datasanpdemo1client

 不写一行代码,绿色三层我也行第17张

 然后编译成EXE独立于IDE运行吧

如图:

不写一行代码,绿色三层我也行第18张

我们的简单的三层终于完成了,你有写代码了吗?

试试把你的程序COPY到U盘上,放到任意电脑上运行呢?

提示少DLL文件?哪到本机上COPY过去吧,啥,你不是说服务器及客户机都只有一个EXE的吗,哪请你在USES里面加上MidasLib 吧

修改的数据关闭后不见了?我可没有说过我的三层程序是可以保存数据的,如果需要保存,请谷哥clientdataset 如何提交数据吧,就一条代码,很简单的

是绿色的吧,要不你把客户机程序的IP改改,然后把服务器程序放到另一台电脑上运行,看下可以运行吗?

 想要源程序鸦用:请去QQ群67803772的共享中下载吧,本站我现在还不懂上传rar文件

文件名是:datasnapdemo不要一行代码就能三层.zip

免责声明:文章转载自《不写一行代码,绿色三层我也行》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java开发中的23种设计模式详解(转)AI专家警告:GPT-3令人赞叹,但缺乏透明度下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

使用 @Query 注解实现查询

2")ListfindByPriceRange;/***参数绑定@Param注解注入参数*/@QueryPersonreadPersonByLastNameAndEmailThroughName;//使用like@Query("selectpfromPersonpwherelastNamelike?...

Spring通过MimeMessageHelper发送邮件,中文附件名出现乱码解决办法

1.设置系统值system。setProperty(“mail.mime.split-longparameters”,“false”);2.在这里,定义创建对象时的编码格式(utf-8):MimeMessageHelper=newMimeMessageHelper(mes,true,“utf-8”);3.其次,添加附件时,附件名称为helper。需要定义代码...

CentOS 7 优化TCP链接

在优化服务器配置时,Summary发现服务器端的WAIT连接上有大量的TIME,需要进行优化。Tomcat案例查询与Tomcat对应的端口的tcp链接,发现存在大量TIME_WAIT链接,以及一些其他状态连接,总计400+。...

db2数据导出导入del与ixf格式

ixf格式保存的是结构和数据,是一个二进制文件,ixf文件不可视。...

开源项目推荐:Qt有关的GitHub/Gitee开源项目

https://www.froglogic.com/windeployqthttps://doc.qt.io/Qt-5/windows部署。htmlhttps://wiki.qt.io/Deploy_an_Application_on_Windowshttps://github.com/lucasg/Dependencieshttp://www.depend...

ClickHouse之访问权限控制

Ck当前只有select和insert。这是我刚才提到的:60cd41aedc4e47e8883682b416109e7b7e345e15ecc63c2c98ecdab5e8e053a只读defaultdefault此部分意味着添加具有只读权限的dba用户。允许访问的数据库是默认值。源IP不受限制::/0尝试以dba用户身份登录:clickhouse-cli...