FireDAC 連接 SQLite 時,透過連接參數精確控制資料庫建立行為:記憶體庫、檔案庫、編碼、頁大小、快取、鎖定策略。建表則可用 TFDConnection.ExecSQL、TFDCommand、底層 TSQLiteStatement 三種方式。本文完整示範從連接參數到建表的標準流程。
FDConnection1.DriverName := 'SQLite'; // 等同 Params.Add('DriverID=SQLite')
FDConnection1.Params.Add('Database=:memory:'); // 可省略,FireDAC 內定空字串即為 :memory:
FDConnection1.Params.Add('SQLiteAdvanced=page_size=4096'); // 頁大小 4KB
FDConnection1.Connected := True;
FDConnection1.Params.Add('DriverID=SQLite');
FDConnection1.Params.Add('Database=C:\Data\MyApp.sdb'); // 存在即開啟,不存在即建立
// 進階參數
FDConnection1.Params.Add('SQLiteAdvanced=temp_store=MEMORY'); // 臨時表存記憶體 (0=DEFAULT, 1=FILE, 2=MEMORY)
FDConnection1.Params.Add('SQLiteAdvanced=temp_store_directory=C:\Temp'); // 臨時檔目錄
FDConnection1.Params.Add('OpenMode=CreateUTF8'); // UTF-8 編碼 (預設),可選 CreateUTF16
FDConnection1.Params.Add('LockingMode=Normal'); // Normal 共享, Exclusive 獨占(寫入更快)
FDConnection1.Connected := True;
所有進階參數對應 SQLite PRAGMA,詳見 SQLite PRAGMA 文檔。
object FDConnection1: TFDConnection; Left = 34; Top = 24; end
object FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink; Left = 143; Top = 24; end
object FDGUIxWaitCursor1: TFDGUIxWaitCursor; Provider = 'Forms'; Left = 260; Top = 24; end
object FDQuery1: TFDQuery; Connection = FDConnection1; Left = 32; Top = 80; end
object DataSource1: TDataSource; DataSet = FDQuery1; Left = 148; Top = 80; end
object FDCommand1: TFDCommand; Connection = FDConnection1; Left = 264; Top = 88; end
object DBGrid1: TDBGrid; Left = 24; Top = 144; Width = 409; Height = 137; DataSource = DataSource1; end
procedure TForm1.FormCreate(Sender: TObject);
const DB_PATH = 'C:\Data\Demo.sdb';
begin
if FileExists(DB_PATH) then DeleteFile(DB_PATH);
FDConnection1.Params.Add('DriverID=SQLite');
FDConnection1.Params.Add('Database=' + DB_PATH);
FDConnection1.Connected := True;
FDConnection1.ExecSQL('CREATE TABLE MyTable(' +
'ID INTEGER PRIMARY KEY,' +
'Name STRING(10),' +
'Age BYTE,' +
'Note TEXT,' +
'Picture BLOB)');
FDQuery1.Open('SELECT * FROM MyTable');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// ... 連接初始化同前 ...
with FDCommand1.CommandText do begin
Add('CREATE TABLE MyTable(');
Add('ID INTEGER PRIMARY KEY,');
Add('Name STRING(10),');
Add('Age BYTE,');
Add('Note TEXT,');
Add('Picture BLOB');
Add(')');
end;
FDCommand1.Active := True; // 執行
FDQuery1.Open('SELECT * FROM MyTable');
end;
uses FireDAC.Phys.SQLiteWrapper;
procedure ExecSQLDirect(ACon: TFDConnection; const ASQL: string);
var Stmt: TSQLiteStatement;
begin
Stmt := TSQLiteStatement.Create(ACon.CliObj);
try
Stmt.Prepare(ASQL);
Stmt.Execute;
while Stmt.PrepareNextCommand do Stmt.Execute; // 支援多條 SQL 以分號分隔
finally Stmt.Free; end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// ... 連接初始化 ...
ExecSQLDirect(FDConnection1,
'CREATE TABLE MyTable(ID INTEGER PRIMARY KEY, Name STRING(10), Age BYTE, Note TEXT, Picture BLOB)');
FDQuery1.Open('SELECT * FROM MyTable');
end;
| Delphi 型別 | SQLite 存儲類別 | 說明 |
|---|---|---|
| ftInteger, ftLargeint, ftAutoInc | INTEGER | 64 位有號整數 |
| ftFloat, ftCurrency, ftBCD, ftFMTBcd | REAL | IEEE 754 雙精度 |
| ftString, ftWideString, ftFixedChar, ftMemo, ftWideMemo | TEXT | UTF-8/16 字串 |
| ftBlob, ftGraphic, ftTypedBinary, ftOraBlob | BLOB | 原始位元組 |
| ftDate, ftTime, ftDateTime, ftTimeStamp | TEXT / REAL | FireDAC 預設存 ISO8601 字串,可設 DateTimeFormat=Julian 存 REAL |
| ftBoolean | INTEGER | 0/1 |
| ftGUID | TEXT | 36 字元字串 |
FireDAC 幕後自動轉換,開發者可直接使用 Delphi 原生型別定義 FieldDefs。

FireDAC 建立 SQLite 資料庫的核心在於連接參數的精確配置(Database, JournalMode, LockingMode, PageSize...)與建表方式的選擇。TFDConnection.ExecSQL 簡潔易用,TFDCommand 適合設計時管理,TSQLiteStatement 適合高效能批量遷移。型別映射表讓 Delphi 開發者無需記憶 SQLite 型別系統,專注業務建模。