Visual FoxPro (VFP) 資料庫有自由表與資料庫容器 (DBC)兩種形式。C++Builder 提供原生 TTable 直連自由表與 TDatabase+ODBC 連結 DBC 兩條路徑。本文對比兩種方案的設定步驟、效能、功能差異與適用場景,助你選對架構。
方案一:直接存取 VFP 自由表
適用
- .dbf 檔案獨立存在,無 DBC、無關聯、無複合索引 (CDX 複合索引會導致開啟失敗)。
- 單機或同網段共享資料夾,資料量中小型。
設定步驟
- 元件面板放置:
TTable、TDataSource、TDBGrid、TDBNavigator。
Table1 屬性:
TableType = ttFoxPro
TableName = "wjk.dbf" (含相對/絕對路徑)
Active = true
- 串聯:
Table1 → DataSource1 → DBGrid1/DBNavigator1。
- 增刪改查直接用
DBNavigator 或 Table1 方法 (Append, Edit, Delete, Post)。
優缺點
| 優點 | 缺點 |
| 設定極簡、零額外驅動、速度最快 | 不支援 DBC 關聯、觸發器、預存程序 |
| 直接操作 .dbf,相容舊系統 | 複合索引 (CDX) 會導致 Active=true 失敗,需先移除 |
| 部署單純 (只帶 .dbf/.cdx/.fpt) | 並發鎖定機制較弱 (僅支援 dBase 鎖定) |
方案二:透過 ODBC 存取 VFP 資料庫容器 (DBC)
適用
- 需保留 DBC 定義的關聯、規則、預設值、觸發器、複合索引。
- 多使用者並發、需交易處理、遠端存取。
設定步驟
- 控制台 → ODBC 資料來源 (32-bit) → 系統 DSN → 新增 → **Microsoft Visual FoxPro Driver** → 選擇
.dbc 檔案 → 名稱 VFP_MyDB。
- C++Builder 放置:
TDatabase、TTable、TDataSource、TDBGrid、TDBNavigator。
Database1 屬性:
AliasName = "VFP_MyDB" (ODBC DSN 名)
DatabaseName = "MyDBLocal" (邏輯名稱)
Params.Clear()
LoginPrompt = false
Connected = true
Table1 屬性:DatabaseName = "MyDBLocal", TableName = "TableNameInDBC", Active = true。
- 串聯同方案一。
優缺點
| 優點 | 缺點 |
| 完整支援 DBC 所有進階功能 | 需部署/設定 ODBC DSN (機器層級) |
標準 SQL 介面,可用 TQuery/TADOQuery 執行複雜查詢 | 速度較方案一慢 (ODBC 層轉換) |
| 支援遠端伺服器、連線池、交易 | VFP ODBC 驅動程式已停止更新,相容性風險 |
選型決策表
| 場景 | 推薦方案 |
| 單機/少量用戶、單純 .dbf、追求極致速度 | 方案一 (直連) |
| 既有 DBC、需關聯/觸發器/複合索引 | 方案二 (ODBC) |
| Web/多層架構、遠端存取、交易完整性 | 方案二 + TClientDataSet + TDataSetProvider |
| 遷移至 SQL Server/PostgreSQL | 方案二為過渡,最終改用 TSQLConnection + TClientDataSet |
「VFP 雖老但仍在產線服役;C++Builder 的雙軌支援讓你能平滑從自由表走向 DBC,再平滑遷移至現代關聯式資料庫。」