XE5 搭建DataSnap服務

1   準備工做

1.1 環境準備

XE5或XE7,操做系統Windows7(64位)操做系統。html

數據庫MSSQL選擇SQLServer2008。sql

若是數據庫服務沒有在開發電腦上,則須要在開發電腦上安裝Microsoft SQL Server 2008 Native Client。由於是64位開發環境,因此須要下載64位的安裝包[1]數據庫

X64 包下載地址:瀏覽器

http://download.microsoft.com/download/9/9/d/99de4110-04b7-4e0e-8375-b04234fff0d8/sqlncli.msi服務器

若是是32位開發環境,則安裝X86安裝包,對應下載地址:tcp

http://download.microsoft.com/download/b/b/2/bb22098a-c071-415f-9269-2eb26cefb562/sqlncli.msiide

固然,也能夠將本實例中的組件SQLConnection---SQLDataSet---DataSetProvider更改成:測試

TFDPhysMSSQLDriverLink---TFDConnection---TFDQuery---TDataSetProviderspa

另一種服務端鏈接數據庫的替代方案是經常使用的 TADOConnection---TADOQuery---TDataSetProvider操作系統

固然,若是是客戶端即鏈接數據庫又進行顯示的話,將TDataSetProvider換爲TDataSource---TDBGrid便可,即 TADOConnection---TADOQuery---TDataSource---TDBGrid
 

2   搭建數據庫服務

在一臺電腦上搭建MSSQLServer2008或MSSQLServer2005數據庫。

2.1 數據庫信息

IP地址

192.168.0.123

用戶名

test

密碼

123

數據庫

xxx

數據庫中的表

T_Bug

 

3   開發DataSnap服務

3.1 新建工程(以XE5爲例)

File->New->Other…->Delphi Projects->DataSnap Server->DataSnapServer,點擊OK

 

 

 

1嚮導中選擇「VCL Forms Application」->Next>>

 

 

2嚮導中選擇 TCP/IP、HTTP、Server Methods Class ->Next>>

 

 

3嚮導中選擇默認端口211,單擊測試若出現成功,則可使用;不然本身設定一個端口,確保正常便可->Next>>

 

 

4嚮導中選擇「TDSServerModule」->Finish

 

 

 

而後保存工程到指定路徑。

3.2 測試DataSnap服務

瀏覽器中輸入

http://192.168.0.198:8080/datasnap/rest/TServerMethods1/EchoString/TestData

返回結果應爲{"result":["TestData"]}

 

 

 

3.3 配置數據庫

使用DBExpress的DBX控件鏈接數據庫

 

 

打開ServerMethodUnit1單元,添加組件:

(1)SQLConnection
(2)SQLDataSet
(3)DataSetProvider

3.3.1 SQLConnection設置

 

 

最後設置Connection爲ture進行鏈接測試,若是不行,檢查配置已經數據庫服務器是否添加了針對數據庫服務的防火牆例外。

爲了支持客戶端數據庫語句操做,須要對DataSetProvider的如下幾個屬性進行配置,poAutoRefresh,poPropogateChange,poAllowCommandText設置爲true。

 

 

3.3.2 SQLDataSet設置

 

 

3.3.3 DataSetProvider設置

 

 

3.3.4 搭建完成

編譯,啓動起來,待客戶端開發時鏈接使用。

 

4   開發DataSnap客戶端

4.1 新建工程(以XE5爲例)

File->New->VCL Forms Application – Delphi

 

 

上述工程建好後,再添加SnapClient。步驟以下:

4.1.1 添加DataSnapClient

File->New->Other…->Delphi Projects->DataSnap Server->DataSnapClient Module,點擊OK

  

 

 嚮導中選擇「Remote server」->Next>>

 

 

嚮導中選擇「DataSnap stand alone server」->Next>>

 

 

嚮導中選擇「TCP/IP」->Next>>

 

 

嚮導中填寫信息「Host Name」填寫本機的IP地址「192.168.0.198」

 

 

端口填寫服務的端口「211」, 點擊Test Connection成功後,點擊Finish。

添加成功後,配置信息已經寫入SQLConnection的屬性中

 

 

4.2 添加鏈接服務端的組件DSProviderConnection

在tool palette中,找到「DataSnap Client」下的TDSProviderConnection,將其放在ClientModuleUnit1這個單元裏。

 

 

4.2.1 配置DSProviderConnection

配置SQLConnection,雙擊便可。在ServerClassName中填寫服務端對應DataSnap服務的類的名字TServerMethods1

 

 

最後,須要進行鏈接,雙擊Connected。

 

 

若是沒有鏈接成功,請檢查配置。

4.3 測試程序代碼

4.3.1 在主單元中增長ClientModuleUnit1

 

 

在Unit1這個form裏,增長控件,在Tool Palette中找到「Data Access」,在其下的TClientDataSet、TDataSource兩個組件放入Form。同時在DataControl這個組中,找到TDBGrid放到Form上,用於顯示數據。

爲了可以共用ClientModuleUnit1中的DSProviderConnection,在Unit1的Form中添加兩份相同的上述控件。

 

 

 

4.3.2 ClientDataSet設置

首先配置RemoteServer,正常雙擊便可將ClientModule1.DSProviderConnection1增長進來。

其次,配置ProviderName,雙擊便可設置爲「DataSetProvider1」

 

4.3.3 DataSource設置

設置其DataSet便可。  

 

 

4.3.4 DBGrid設置

設置其數據源便可,即DataSource。

 

 

 

4.3.5 對另一組作一樣的上述設置

4.3.6 添加兩個Button,分別對兩組進行測試

procedure TForm1.Button1Click(Sender: TObject);

begin

  ClientDataSet1.Close;

  ClientDataSet1.CommandText := ' select top 10 * from T_Bug ';

  ClientDataSet1.Open;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  ClientDataSet2.Close;

  ClientDataSet2.CommandText := ' select top 3 * from T_Bug ';

  ClientDataSet2.Open;

end;

4.3.7 測試問題處理

 

 

 

該問題須要在客戶端主單元中引入MidasLib便可(添加MidasLib的目的是省去發佈Midas.dll)。

若是服務器使用了http協議做爲datasnap通信的話,還需在客戶端程序中加上 uses DSHTTPLayer;若是使用tcp協議,無需增長DSHTTPLayer

 在編譯電腦上運行正常,程序在其它電腦上運行出現問題

解決辦法:

--服務端

在unit ServerMethodsUnit1單元中,添加uses MidasLib;(添加MidasLib的目的是省去發佈Midas.dll)

若是用的是火鳥數據庫,只需拷貝dbxfb.dll和fbclient.dll 

分發的服務器軟件只需三個文件:服務器程序、dbxfb.dll 和 fbclient.dll

 --客戶端

在客戶端程序中加上uses MidasLib;(添加MidasLib的目的是省去發佈Midas.dll)

若是服務器使用了http協議做爲datasnap通信的話,還需在客戶端程序中加上 users DSHTTPLayer;若是使用tcp協議,無需增長DSHTTPLayer

 

添加後運行界面如圖:

 

參考文獻

[1]        DBX Error:Driver could not be properly initialized. Client library may be missing, not installed pro [C/OL]/ [2016-07-10]. https://blog.csdn.net/2001xgp/article/details/51870859.

http://www.javashuo.com/article/p-olqkvpii-du.html

 https://www.cnblogs.com/neugls/archive/2011/09/27/2193579.html LiveBinding

相關文章
相關標籤/搜索