方案選型對比(2024 視角)
| 方案 | 狀態 | 優點 | 缺點 | 建議 |
| FireDAC | ✅ 現代標準 (RAD Studio 10.x+ 內建) | 高效能、跨平台、支援 Oracle 12c/19c/21c 新特性、非同步、陣列 DML、連線池內建 | 需較新 RAD Studio 版本 | 首選,新專案直接用 |
| dbExpress | ⚠️ 維護模式 (10.4 後標記棄用) | 輕量、原生驅動、無額外運行時 | 無連線池、Oracle 新特性支援滯後、單執行緒阻塞 | 舊專案維護可用,新專案避免 |
| ADO (dbGo) | ⚠️ 僅 Windows、依賴 Oracle Provider for OLE DB | Windows 整合好、ADO.NET 互通 | OLE DB Provider 易版本衝突、64 位元部署麻煩、非跨平台 | Windows 專用舊專案 |
| BDE | ❌ 已淘汰 (Borland 時代產物) | 無 | 16 位元架構殘留、不支援 Unicode、Oracle 9i 後不再認證 | 嚴禁新專案,舊專案儘速遷移 |
FireDAC 快速上手(推薦)
設計時配置
- 放置
TFDConnection (FDConnection1)
- 雙擊開啟連線編輯器:
- Driver ID:
Ora
- Database:
//dbhost:1521/ORCLPDB1 (Easy Connect) 或 TNS 別名
- User_Name / Password
- Params:
CharacterSet=AL32UTF8、FetchOptions.RowsetSize=1000、FormatOptions.StrsEmpty2Null=True
- 測試連線 → 確定
運行時動態連線
FDConnection1.Params.Clear;
FDConnection1.Params.DriverID := 'Ora';
FDConnection1.Params.Database := '//dbhost:1521/ORCLPDB1';
FDConnection1.Params.UserName := 'app_user';
FDConnection1.Params.Password := 'secret';
FDConnection1.Params.Add('CharacterSet=AL32UTF8');
FDConnection1.Connected := True;
查詢與參數化
FDQuery1.Connection := FDConnection1;
FDQuery1.SQL.Text := 'SELECT empno, ename, sal FROM emp WHERE deptno = :deptno AND sal > :minsal';
FDQuery1.ParamByName('deptno').AsInteger := 20;
FDQuery1.ParamByName('minsal').AsFloat := 2000;
FDQuery1.Open;
// 遍歷
while not FDQuery1.Eof do begin
ShowMessage(FDQuery1.FieldByName('ename').AsString);
FDQuery1.Next;
end;
dbExpress 配置(舊專案維護參考)
- 放置
TSQLConnection (SQLConnection1)
- 右鍵
Edit Connection Properties:
- Driver:
Oracle (dbxora.dll / dbxora32.dll)
- Database: TNS 服務名 (如
ORCL)
- User_Name / Password
LoginPrompt = False (避免對話框)
GetDriverFunc=getSQLDriverORACLE, LibraryName=dbxora.dll, VendorLib=oci.dll
- 需部署
dbxora.dll、oci.dll (Oracle Instant Client) 至應用目錄或 PATH。
Oracle Client 部署必讀
- Instant Client:輕量、免安裝、解壓即用。下載
Basic + SQL*Plus + ODBC (視需求) 三個 ZIP,解壓至同一目錄 (如 C:\oracle\instantclient_21_10)。
- 環境變數:將該目錄加入系統
PATH;設定 TNS_ADMIN 指向含 tnsnames.ora 的目錄(若使用 TNS 別名)。
- 64 位元應用必須用 64 位元 Instant Client,32 位元應用用 32 位元,不可混用。
遷移建議:BDE/dbExpress → FireDAC
- 備份專案。
- 專案管理器 →
Migrate to FireDAC 精靈 (RAD Studio 內建)。
- 手動檢查:
TQuery→TFDQuery、TTable→TFDTable、TDatabase→TFDConnection、TSession 移除 (FireDAC 無此概念)。
- SQL 方言差異:FireDAC 預設
ParamCreate 為 ptInput,FetchOptions.Mode 為 fmAll,按需調整。
- 測試所有資料操作路徑,特別是
Locate/Lookup/Filter、Blob/Clob 處理、預存程序呼叫。