DBF (dBASE/FoxPro) 是歷史最悠久、普及度最高的桌面數據庫格式。Delphi 提供多種方式利用現有 DBF 資源:直接訪問、轉換為原生 Paradox、批量遷移工具。
TTable.DatabaseName 設為該別名,TableName 設為文件名 (如 CUST.DBF) 即可讀寫。優點:零轉換、實時讀寫、支持索引 (MDX/CDX/NTX)。缺點:依賴 BDE 部署、並發性能弱、無事務、字段類型映射受限。
DBD.EXE (Delphi 安裝目錄/bin)。student.dbf,目標輸入 student.db (Paradox 擴展名)。| DBF 類型 | Paradox 類型 |
|---|---|
| C (Character) | Alpha |
| N/F (Numeric/Float) | Number |
| L (Logical) | Logical |
| D (Date) | Date |
| M (Memo) | Memo |
| OLE | OLE |
| B (Binary) | Graphic |
注意:Memo 字段若含非文本數據,需手動添加為 Paradox BLOB 類型。反向轉換 Paradox → DBF 亦有對應映射表,生成 dBASE III/IV/Windows DBF 取決於字段類型組合。
優勢:可視化字段映射調整、支持批量多表、生成詳細日誌、也適用於 SQL Server 等異構遷移。
適用於在應用程序中內嵌遷移功能。
// 1. Database Desktop 中預建目標 Paradox 表結構 (字段順序/類型對應)
// 2. 兩個 TTable: Table1(源 DBF), Table2(目標 .db)
// 3. TBatchMove: Mode = batCopy; Source = Table1; Destination = Table2
// 4. 右鍵 BatchMove → Execute (或代碼 BatchMove1.Execute)
procedure TForm1.BtnMigrateClick(Sender: TObject);
begin
Table1.Open; Table2.Open;
try BatchMove1.Execute; finally Table1.Close; Table2.Close; end;
end;
限制:BatchMove 不復制索引、引用完整性、自增字段種子,僅移動數據行。結構需預建。
| 場景 | 推薦方案 |
|---|---|
| 少量表、一次性遷移、需精細調整字段 | Database Desktop / Data Pump |
| 大量表、批量自動化、集成到部署腳本 | Data Pump 命令行 / TBatchMove 代碼 |
| 應用運行期需直接讀寫現有 DBF | BDE 直接訪問 (或第三方如 Apollo DBF, nxDB) |
| 長期項目、追求性能與功能 | 轉換為 SQLite / Firebird / PostgreSQL 等現代引擎 |
Delphi 為 DBF 提供了完整的工具鏈:BDE 直接訪問解決即時業務,Database Desktop/Data Pump解決交互式遷移,TBatchMove解決程序化遷移。理解字段類型映射差異與索引/約束不遷移的限制,是成功遷移的關鍵。新項目建議直接選擇現代嵌入式數據庫,避免 DBF 歷史包袱。