程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> DELPHI DATASNAP 2010入門操作(2)不寫一行代碼,綠色三層我也行

DELPHI DATASNAP 2010入門操作(2)不寫一行代碼,綠色三層我也行

編輯:Delphi

沒有一行代碼的三層,功能肯定非常的簡單,但是,再簡單,我們也三層了,學習一 個東西,需要從入門開始就有興趣,如果入門就給嚇怕了,哪麼後來何來信心學習呢? 現在就讓我們開始吧,不只是沒有華麗的詞語,而是連用詞都不專業,因為,我也只是 一個入門者。

我所用的版本為: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文 件

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved