在 Delphi 開發中,FireDAC 提供了強大且統一的資料庫存取架構。本文將詳細示範如何使用 FireDAC 連接 SQLite 資料庫,並獲取連接資訊、資料表清單、欄位定義以及實際資料等核心中繼資料。
在空白表單上放置以下核心元件:
procedure TForm1.FormCreate(Sender: TObject);
var
List: TStrings;
V: Variant;
begin
// 開啟 SQLite 資料庫連接
FDConnection1.Open('DriverID=SQLite; Database=C:\Temp\FDDemo.sdb');
List := TStringList.Create;
try
// 1. 獲取完整連接資訊報表
FDConnection1.GetInfoReport(List);
Memo1.Clear;
Memo1.Lines.Add('==> 獲取連接資訊:');
Memo1.Lines.AddStrings(List);
// 2. 獲取所有資料表名稱
FDConnection1.GetTableNames('', '', '', List);
Memo1.Lines.Add(#13#10'==> 獲取資料庫中的資料表名稱清單:');
Memo1.Lines.AddStrings(List);
// 3. 獲取所有檢視表名稱
FDConnection1.GetTableNames('', '', '', List, [], [tkView]);
Memo1.Lines.Add(#13#10'==> 獲取資料庫中的檢視表名稱清單:');
Memo1.Lines.AddStrings(List);
// 4. 獲取指定資料表的欄位名稱
FDConnection1.GetFieldNames('', '', 'Orders', '', List);
Memo1.Lines.Add(#13#10'==> 獲取 Orders 資料表中的欄位名稱清單:');
Memo1.Lines.AddStrings(List);
// 5. 透過中繼資料介面獲取第一筆實際資料
V := FDConnection1.ConnectionMetaDataIntf.GetTables([], [tkTable], '', '', '').Rows[0].GetData(0);
Memo1.Lines.Add(#13#10'==> 獲取第一個資料表中第一列的第一筆資料:');
Memo1.Lines.Add(V);
finally
List.Free;
end;
end;
程式執行後將輸出類似以下的詳細資訊:
{結果如下:}
{...............................................................
==> 獲取連接資訊:
================================
Connection definition parameters
================================
Name=Unnamed
DriverID=SQLite
Database=C:\Temp\FDDemo.sdb
================================
FireDAC info
================================
Tool = RAD Studio XE6
FireDAC = 10.0.1 (Build 69712)
Platform = Windows 32 bit
Defines = FireDAC_NOLOCALE_META;FireDAC_MONITOR
================================
Client info
================================
Loading driver SQLite ...
DLL =
Client version = 3.8.3.1
Compile options = ENABLE_COLUMN_METADATA;ENABLE_FTS3;
ENABLE_FTS3_PARENTHESIS;ENABLE_FTS4;ENABLE_RTREE;
ENABLE_STAT4;HAS_CODEC;OMIT_AUTOINIT;
OMIT_DEPRECATED;SYSTEM_MALLOC;TEMP_STORE=2;
THREADSAFE=2
================================
Session info
================================
Current catalog =
Current schema =
Total changes = 0
Database encoding = UTF8
Encryption mode =
Cache size = 10000
==> 獲取資料庫中的資料表名稱清單:
Categories
CustomerCustomerDemo
CustomerDemographics
Customers
Employees
EmployeeTerritories
FDQA_all_types
... (更多資料表)
Orders
Products
Region
Shippers
Suppliers
Territories
==> 獲取資料庫中的檢視表名稱清單:
FDQA_V_Test
==> 獲取 Orders 資料表中的欄位名稱清單:
OrderID
CustomerID
EmployeeID
OrderDate
RequiredDate
ShippedDate
ShipVia
Freight
ShipName
ShipAddress
ShipCity
ShipRegion
ShipPostalCode
ShipCountry
==> 獲取第一個資料表中第一列的第一筆資料:
1
...............................................................}
FireDAC 為 SQLite 提供了四層封裝架構,由底層至上層分別為:
透過 FireDAC.Phys.SQLiteWrapper 單元提供的 TSQLiteDatabase 類別,可直接存取 SQLite 底層特性。該類別無需手動建立,可直接從連接元件轉換取得:
uses FireDAC.Phys.SQLiteWrapper; procedure TForm1.Button1Click(Sender: TObject); var db: TSQLiteDatabase; begin // 假設 FDConnection1 已成功連接 db := TSQLiteDatabase(FDConnection1.CliObj); ShowMessage(db.CharacterSet); // 輸出: UTF8 end;
這種方式讓開發者在需要時能突破 FireDAC 統一介面的限制,直接存取 SQLite 特有功能,同時保持程式碼的可維護性。