(1)利用向導完成DataSnap服務器的框架,如下圖:
由於是實驗,所以選擇VCL程序,如果是實際應用,建議Service程序
我習慣使用TCP/IP作為通訊協議,簡單且速度快,Sample Methods是演示和測試用
缺省211端口
使用TDSServerModule作為數據服務提供主體,非常方便變更為Service應用服務
(2)設置服務器數據
在TDSServerModule中設置數據,為簡便起見,采用BDE引擎的DBDEMOS下animals.dbf數據庫,有文字也有圖片,如下圖:
放置壹個TDataSetProvider連接該數據源,如下圖:
服務器至此設計完成,沒有編寫壹行代碼,只是調整了部分控件和窗體的名稱。手動啟動該應用服務程序。
(3)新建Android客戶端程序
新建壹個android客戶端程序,在工程中增加壹個TDataModule模塊,用於放置與應用服務器的連接和數據,在模塊窗體上放置TSQLConnection、TDSPProviderConnection、TClientDataSet三個控件,如下圖:
其中TSQLConnection的屬性設置中LoginPrompt要設為False,TDSPProviderConnection的屬性設置如下:
其中ServerClassName是指應用服務器上作為數據服務提供主體的TDSServerModule的實例類名稱,在這裏我習慣性地重新命名了,缺省壹般是TServerMethods1。TClientDataSet的設置如下圖:
為實現應用服務器上Sample Methods在客戶端的調用,需要創建服務類在客戶端的實現類,右鍵點擊TSQLConnection選擇生成,如下圖:
新生成的類定義如下:
以上過程完全同Windows下的DataSnap客戶端開發。
(4)Android界面顯示數據
Android下對數據的顯示,與Windows下開發最大的區別是,無法使用TDBEdit壹類的數據感應控件,取而代之的是標準控件,通過LiveBindings技術實現數據感應。要實現該過程,首先是在窗體上放置用於數據展示的標準控件,這裏采用了TListBox和TGrid,通過TTabControl分開,如下圖:
IP和Port輸入框是為了更靈活地連接服務器,下面的按鈕OnClick事件代碼如下:
procedure TfrmMain.Button1Click(Sender: TObject);
var
dm : TdmServerMethodsClient;
begin
try
//連接指定IP和Port的應用服務器
dmMain.SQLConn.Close;
dmMain.SQLConn.Params.Values['HostName'] := edtIP.Text;
dmMain.SQLConn.Params.Values['Port'] := edtPort.Text;
try
dmMain.SQLConn.Open;
try
//創建應用服務器上的Sample Methods在客戶端的實現類
dm := TdmServerMethodsClient.Create(dmMain.SQLConn.DBXConnection);
//執行服務器上的方法
ShowMessage(dm.ReverseString(edtIP.Text));
finally
dm.Free;
end;
//開啟客戶端數據集
dmMain.cdsanimals.Close;
dmMain.cdsanimals.Open;
except
on E: Exception do
ShowMessage(E.Message);
end;
finally
dmMain.SQLConn.Close;
end;
end;