劉之燁 雷聚超 胡靜宜
摘 要:服務器與數據庫之間的連接直接影響了DataSnap三層數據庫應用系統的傳輸效率。現階段主流的連接技術為ADO與dbExpress。但是開發過程中存在著數據引擎兼容性不高、封裝繁瑣、連接邏輯復雜等問題。因此提出使用FireDAC數據引擎開發DataSnap三層C/S結構的數據庫應用。文章根據在Delphi xe10平臺的開發過程得出FireDAC數據引擎具有連接邏輯簡單,數據庫兼容性強等優點,更適合用于開發DataSnap三層數據庫應用。
關鍵詞:FireDAC; DataSnap技術;三層C/S結構
中圖分類號:TP311 文獻標志碼:A 文章編號:2095-2945(2017)36-0120-02
引言
三層C/S結構較于傳統的兩層C/S結構具有更好穩定性、安全性、易維護性,同時也具有更快的響應速度等優點。因此在開發大型數據庫應用系統的過程中,三層C/S結構的應用越來越普遍。
Delphi是一個功能強大,基于Windows環境,面向對象的可視化應用軟件開發工具。它結合了傳統的編程語言Object Pascal和數據庫語言的強大功能,既可以用于傳統算術編程又可以用于數據庫編程。Delphi中的DataSnap技術體系,提供了客戶端和應用服務器之間傳遞數據庫信息的機制,同時豐富的組件庫給程序的設計帶來極大的便利。Delphi已經成為當前最流行的C/S開發工具之一。
開發DataSnap三層數據庫應用的過程中,必須首先建立與數據庫之連接,它是應用程序和后臺數據庫之間交換數據的前提。
1 FireDAC基本原理
FireDAC不使用IAppServer接口,而是把DataSnap服務器當作API來呼叫。客戶端使用TFDConnection組件通過TCP/IP或HTTP/HTTPS協議連接使用FireDAC開發的DataSnap服務器,使用TFDStoredProc組件呼叫服務器API。
如果客戶端呼叫的API需要回傳數據,那么FireDAC會以Stream的格式傳遞數據,如果要對數據進行包含異動的工作,那么可以搭配使用FireDAC的中央快儲功能來幫助程序員對數據進行異動。
在DataSnap架構中要使用FireDAC的中央快儲功能,需要在應用服務器使用TFDSchemaAdapter組件。而在FireDAC客戶端則需要使用TFDTableAdapter組件把客戶端TFDMemTable罪案中的數據從應用服務器取回或是從客戶端把異動的數據更新回應用層服務器。
因此要使用FireDAC開發DataSnap應用,需要下列步驟:
(1)開發使用FireDAC的DataSnap服務器,并使用FireDAC中央快儲功能。
(2)開發使用FireDAC的客戶端,使用TFDConnection連接服務器。
(3)使用TFDStoredProc組件呼叫服務器API。
(4)處理數據流(Stream Data)。
(5)使用TFDStoredProc組件呼叫服務器的API把異動數據回傳給FireDAC的DataSnap服務器,再由FireDAC的中央快儲功能把數據更新回數據庫。
2 三層數據庫應用的實現過程
2.1 創建數據庫
(1)在Mysql中創建名為XATU的數據庫,在數據庫中創建TEST表,增加兩列,列名分別為“xm”和“xh”并錄入信息作為查詢之用。
(2)將MySQL的動態鏈接庫文件libmysql.dll存放到C:\WINDOWS\SYSTEM32目錄下。
2.2 創建DataSnap服務器
(1)主菜單“File”->“New”->“Other”在“New Items”對話框中選擇DataSnap Server,啟動向導。“Project Type”選擇“Forms Application”、 “Application Type”選擇“VCL Application” 默認TCP/IP為通訊協議,測試端口211,選擇TDataModule 作為服務器端API類別。完成后,生成三個工程文件ServerContainerUnit1.pas、Unit1.pas。ServerMethodsUnitsUnit1.pa
s存放網絡服務相關的控件,Unit1.pas是服務器的主界面,ServerContainerUnit1.pas是我們需要進一步開發的工程文件。
(2)打開ServerMethodsUnitsUnit1.pas,加入TFDSchemaAd
apter、TFDQuery、TFDStanStorageJSONLink等組件。TFDStanStor
ageBinLink和TFDStanStorageJSONLink的作用是讓FireDAC可以處理2進制(TCP/IP)和JSON(Http)格式的數據。
(3)進入Code單元,在Public下添加代碼“function GET:TStream;”。添加的GET方法可以讓客戶端查詢信息。FireDAC中要在客戶端和應用服務器之間傳遞數據,只需要傳遞TStream形態的數據。GET()方法首先建立一個TMemoryStream對象,再開啟FDQuery1組件取得數據,然后把FDQuery1組件中的數據對象通過TMemoryStream類中的SaveToStream方法拷貝到TMemoryStream對象中,最后把TMemoryStream對象回傳給客戶端。
(4)編譯運行DataSnap服務器。
2.3 創建DataSnap客戶端endprint
(1)主菜單“File”->“New”->“Muti-Device Application”,在窗體中添加TFDConnection、TFDGUIxWaitCursor、TFDPhysDSDriverLink等組件。
(2)在主界面的Button1的OnClick事件中呼叫GETXX()方法和SHOWXX()方法。GETXX方法獲取數據,SHOWXX()方法展示數據。
GETXX()方法只需要呼叫FDStoredProc1的ExecProc()方法,FireDAC就可以呼叫DataSnap服務器中指定的服務方法(GET),呼叫成功后DataSnap服務器回傳的數據回存儲在FDStoredProc1的第一個參數中,型態是ftBlob。創建一個TStringStream對象把FDStoredProc1的第一個參數內容作為建構元參數,TStringStream對象的內容就是回傳的結果,把TStringStream對象包含的數據流位置設定到起始位置,再通過FDMemTable1組件的LoadFromStream()方法從TStringStre
am對象中讀取數據流并還原。
(3)編寫代碼并執行客戶端,點擊Button按鈕,數據庫中的信息已經通過應用層服務器傳輸到客戶端,并展示在ListView組件中。
至此一個基于FireDAC的DataSnap三層數據庫應用已經搭建完成,進一步的開發除了需要根據用戶需求完善客戶端界面外,還需要根據需求編寫對應的應用層業務邏輯,完成相應的功能。
3 結束語
根據以上開發過程可以得出FireDAC有以下優點:
(1)跨數據庫平臺。FireDAC作為一個通用數據訪問庫,用于開發與企業數據庫連接的多個設備的應用程序。通過其強大的通用架構,FireDAC可實現從Delphi到InterBase,SQLite的本機高速直接訪問。
(2)訪問快速。FireDAC數據集建立在強大的數據訪問引擎之上。這種輕便,有效和靈活的引擎可以直接在應用程序中使用,并且是數據集API的強大基礎。
(3)良好的兼容性。FireDAC可以使用TDataSet后代類,包括TFDQuery,TFDMemTable,TFDStoredProc和TFDTable。同時數據集類與原始BDE數據集和ClientDataSet高度兼容。
FireDAC技術和DataSnap技術相結合,為三層數據庫應用的開發提供了良好的支持,為構建滿足不同需求的多層C/S體系的數據庫應用程序打下了良好基礎。定會成為日后開發三層數據庫應用的主流趨勢。
參考文獻:
[1]李文生.采用Delphi實現三層客戶/服務器數據庫應用程序[J].計算機工程,2000(7):170.
[2]張志強.基于DataSnap技術實現三層C/S體系的數據庫應用[J].軟件導刊,2011(10):167.
[3]楊長春.Delphi程序設計教程[M].北京:清華大學出版社,2016.endprint