Android開發數據庫三層應用-DataSnap

Android開發數據庫三層應用-DataSnap

時間:2013-10-24 13:41:54 點擊:4988

  核心提示:我以爲Delphi最強大的的功能之一就是開發數據庫三層應用的DataSnap,在Android上的實現,首先是完成服務器的設計:(1)利用嚮導完成DataSnap服務器的框架,以下圖:因爲是實驗,因此選擇VCL程序,若是是實際應用,建議Service程序我習慣使用TCP/IP做爲通信協議,簡單且速度...android

我以爲Delphi最強大的的功能之一就是開發數據庫三層應用的DataSnap,在Android上的實現,首先是完成服務器的設計:數據庫

1)利用嚮導完成DataSnap服務器的框架,以下圖:服務器

<!--[if !vml]-->532&times;238<!--[endif]-->框架

因爲是實驗,因此選擇VCL程序,若是是實際應用,建議Service程序ide

<!--[if !vml]-->533&times;297<!--[endif]-->函數

我習慣使用TCP/IP做爲通信協議,簡單且速度快,Sample Methods是演示和測試用測試

<!--[if !vml]-->535&times;529<!--[endif]-->spa

缺省211端口設計

<!--[if !vml]-->539&times;321<!--[endif]-->事件

使用TDSServerModule做爲數據服務提供主體,很是方便變動爲Service應用服務

<!--[if !vml]-->542&times;320<!--[endif]-->

2)設置服務器數據

TDSServerModule中設置數據,爲簡便起見,採用BDE引擎的DBDEMOSanimals.dbf數據庫,有文字也有圖片,以下圖:

<!--[if !vml]-->542&times;448<!--[endif]-->

放置一個TDataSetProvider鏈接該數據源,以下圖:

<!--[if !vml]-->548&times;371<!--[endif]-->

服務器至此設計完成,沒有編寫一行代碼,只是調整了部分控件和窗體的名稱。手動啓動該應用服務程序。

3)新建Android客戶端程序

新建一個android客戶端程序,在工程中增長一個TDataModule模塊,用於放置與應用服務器的鏈接和數據,在模塊窗體上放置TSQLConnectionTDSPProviderConnectionTClientDataSet三個控件,以下圖:

<!--[if !vml]-->562&times;171<!--[endif]-->

其中TSQLConnection的屬性設置中LoginPrompt要設爲FalseTDSPProviderConnection的屬性設置以下:

<!--[if !vml]-->568&times;164<!--[endif]-->

其中ServerClassName是指應用服務器上做爲數據服務提供主體的TDSServerModule的實例類名稱,在這裏我習慣性地從新命名了,缺省通常是TServerMethods1TClientDataSet的設置以下圖:

<!--[if !vml]-->570&times;408<!--[endif]-->

爲實現應用服務器上Sample Methods在客戶端的調用,須要建立服務類在客戶端的實現類,右鍵點擊TSQLConnection選擇生成,以下圖:

<!--[if !vml]-->421&times;393<!--[endif]-->

新生成的類定義以下:

<!--[if !vml]-->607&times;175<!--[endif]-->

以上過程徹底同Windows下的DataSnap客戶端開發。

4Android界面顯示數據

Android下對數據的顯示,與Windows下開發最大的區別是,沒法使用TDBEdit一類的數據感應控件,取而代之的是標準控件,經過LiveBindings技術實現數據感應。要實現該過程,首先是在窗體上放置用於數據展現的標準控件,這裏採用了TListBoxTGrid,經過TTabControl分開,以下圖:

<!--[if !vml]-->331&times;642<!--[endif]-->

IPPort輸入框是爲了更靈活地鏈接服務器,下面的按鈕OnClick事件代碼以下:

procedure TfrmMain.Button1Click(Sender: TObject);

var

 dm : TdmServerMethodsClient;

begin

 try

   //鏈接指定IPPort的應用服務器

  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;

客戶端界面與數據集之間採用LiveBindings方式,最好是打開LiveBindings設計頁面,以下圖:

<!--[if !vml]-->243&times;151<!--[endif]-->

<!--[if !vml]-->428&times;299<!--[endif]-->

因爲TListBox只能顯示一個字段數據,因此用另一個窗體單獨顯示某條記錄的詳細信息,以下圖:

<!--[if !vml]-->435&times;651<!--[endif]-->

啓動並運行,點擊按鈕執行服務器函數後界面以下圖:

<!--[if !vml]-->426&times;489<!--[endif]-->

TGrid展現數據以下圖:

<!--[if !vml]-->436&times;505<!--[endif]-->

TlistBox展現數據以下圖:

<!--[if !vml]-->422&times;484<!--[endif]-->

點擊某條記錄後,顯示明細窗體,以下圖:

<!--[if !vml]-->421&times;484<!--[endif]-->

結論:

1Android下開發DataSnap客戶端,對數據的處理和服務函數調用與Windows下一致;

2Android客戶端展現不能使用數據感應控件,只能使用標準控件,經過LiveBindings技術來實現數據關聯;

3Windows下使用TClientDataSet須要用到Midas.dll,在Android下這個問題不存在了,也不須要單獨部署Midas支持的相關文件,可是看材料iOS下好像還要部署,沒試過。

相關文章
相關標籤/搜索