沒有一行代碼的三層,功能肯定非常的簡單,但是,再簡單,我們也三層了,學習一 個東西,需要從入門開始就有興趣,如果入門就給嚇怕了,哪麼後來何來信心學習呢? 現在就讓我們開始吧,不只是沒有華麗的詞語,而是連用詞都不專業,因為,我也只是 一個入門者。
我所用的版本為:Embarcadero® Delphi® 2010 Version 14.0.3593.25826
一、讓我們 file->new->other ,再選 datasnap server ,或者F6,輸入 datasnap
如圖,我們有兩個可選項
datasnap server :選擇這一項,我們得到的將是一 個獨立EXE的三層服務器應用程序(TCP及HTTP兩種模式)
datasnap WebBroker application :選擇這一項我們得到的是一個基於ISAPI的程序 ,需要把程序發布到IIS 等上面才可以運行
選擇第一基的配置方便,但是如果並發訪問量大的話,需要編程者的水平高才可以, 選擇第二項則配置麻煩,但是由於HTTP 是無連接模式,理論上對並發量的控制都交給了 IIS了,而不是我們的應用程序了(本處如果說得不對的請指點,謝謝!)
現在我們選擇第一項
出現如下圖所示的界面:
應用程序類別(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下一步吧!
自動生成了三個模塊,第一二個上面空白的,第三個則如圖
我們再看看生成的單元內容是什麼
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.
unit ServerContainerUnit1;
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為:(注:下面是自動生成的連接串,你也自動生成一個吧,應該 會看我文章的所有人都會這個操作的)
Provider
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
設置完成了,現在我們記下DSTCPServerTransport1的prot值
ServerMethodsUnit1中的: TServerMethods1 = class(TDSServerModule) ,如果 TServerMethods1給你改成了其它的代碼了,則需要記住對應的代碼
以上兩個值一會兒在客戶端要用到
編譯並獨立於IDE運行服務器端吧
運行後如圖:
保持服務器端不要關閉,讓我們開始客戶端的編程吧
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
然後編譯成EXE獨立於IDE運行吧
如圖:
我們的簡單的三層終於完成了,你有寫代碼了嗎?
試試把你的程序COPY到U盤上,放到任意電腦上運行呢?
提示少DLL文件?哪到本機上COPY過去吧,啥,你不是說服務器及客戶機都只有一個 EXE的嗎,哪請你在USES裡面加上MidasLib 吧
修改的數據關閉後不見了?我可沒有說過我的三層程序是可以保存數據的,如果需要 保存,請谷哥clientdataset 如何提交數據吧,就一條代碼,很簡單的
是綠色的吧,要不你把客戶機程序的IP改改,然後把服務器程序放到另一台電腦上運 行,看下可以運行嗎?
想要源程序鴉用:請去QQ群67803772的共享中下載吧,本站我現在還不懂上傳rar文 件