FireDAC 學習 - 1

之前玩 Delphi,數據庫部分,用得最多的是 TClientDataSet。這個 TClientDataSet 有很多玩法,重點是它可以作爲一個獨立的內存表,無論數據來自什麼數據庫都支持,並且可以把內容保存爲文件,也可以把內容通過遠程傳遞。

新的 Delphi,TClientDataSet 還在,但有了新的 FireDAC 的整套數據庫訪問控件,它也包含一個 TDfMemeTable 內存表控件。這個內存表控件該如何使用?比如,來自數據庫的數據,該如何放進去?

開始學習 FireDAC 的玩法。這裏大概會寫一個系列。

今天來個簡單的:

--------------------------------------------------------------

開始測試

新建一個 VCL 工程。拖幾個 FireDAC 的控件過來。

1. FDConnection1 用來連接數據庫;我這裏使用 FireBird 數據庫,我自己在硬盤上創建了一個測試用的 FireBird 數據庫。雙擊它會彈一個窗口出來,在裏面可以對它要連接的數據庫進行一些參數設置。參數設置正確,就可以成功連接數據庫了。

2. FDQuery1,它的 Connection 屬性指向 FDConnection1,這樣它就可以訪問對應的數據庫裏面的表。

2.1. FDQuery1 的 SQL 屬性裏面填寫:select * from TAB_AUTO;這裏的 TAB_AUTO 是我的測試用的數據庫裏面我自己建立的一個表的名字。到這裏,如果一切順利,在設計期,可以打開 FDQuery1 成功。如果有問題,查一下數據庫連接的屬性設置裏哪個地方沒做對。

3. 拖一個 FDMemTable1 到界面上;再拖一個 DataSource1 到界面上,其 DataSet 屬性指向 FDMemTable1;

4. 拖一個 DBGrid1 到界面上,其 DataSource 屬性指向 DataSource1;這樣,當 FDMemTable1 裏面有數據的時候,可以從 DBGrid1 看到。

5. 拖一個 FDGUIxWaitCursor1 到界面上,否則 FireDAC 在打開數據庫的時候,會凍結界面。

6. 拖兩個按鈕到界面上,代碼如下:

procedure TForm1.Button1Click(Sender: TObject);
begin
  FdQuery1.Open();
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  AStream: TMemoryStream;
begin
  AStream := TMemoryStream.Create;
  try
    FdQuery1.SaveToStream(AStream);

    AStream.Position := 0;
    FdMemTable1.LoadFromStream(AStream);
  finally
    AStream.Free;
  end;
end;

Button1 的代碼就是打開 FdQuery1,也就是從數據庫獲取數據;

Button2 的代碼是把 FdQuery1 的數據,輸出給 FdMemTable1;

運行程序,先點 Button1,沒有任何出錯信息,說明成功;再點 Button2,出來一個異常:

根據上述異常提示,我去控件面板裏面,找到一個控件:FDStanStorageBinLink1 拖過來放到界面上,再次運行,成功。

以下是正確的設計期的界面控件:

以下是點了【取數據】也就是 Button2 以後的執行成功的結果:

總結:

1. FireDac 的 TDataSet 要輸出數據,採用 FdQuery1.SaveToStream(AStream); 的方法,但必須要拖一個 FDStanStorageBinLink1 到界面上,否則會出異常。在控件面板的 FireDAC Links 裏面,還要諸如 FDStanStorageXMLLink1 等 Link,也就是說,要輸出爲其它格式比如 XML 也需要拖一個對應的 Link 控件過來;

2. 上述代碼裏面有:AStream.Position := 0;,如果沒有這句,則執行 FdMemTable1.LoadFromStream(AStream); 會出現異常提示。這裏說明 LoadFromStream 方法是從 AStream 的當前位置開始的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章