1. 程式人生 > >不寫一行代碼,綠色三層我也行

不寫一行代碼,綠色三層我也行

mdb ces get type 今天 auth 訪問 參數 registry

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技術分享圖片

技術分享圖片

如圖,我們有兩個可選項

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. 技術分享圖片

技術分享圖片 技術分享圖片 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=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文件

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

不寫一行代碼,綠色三層我也行