前言:什麼是 BDE 錯誤代碼?
Borland Database Engine (BDE) 是早期 Delphi/C++Builder 核心資料庫引擎。當資料庫操作發生異常時,BDE 會回傳 16 進位錯誤代碼(如 $2108 / 8456)。本文整理官方完整代碼表,並按類別分組說明常見錯誤成因與解決方案。
錯誤代碼分類總覽
| 代碼範圍 (Hex) | 十進位 | 類別名稱 | 主要說明 |
| $0000 | 0 | 成功完成 | 操作正常結束 |
| $0021~$0034 | 33~52 | 通用錯誤類別 | 系統、資料損壞、I/O、資源、鎖定、存取、網路等 |
| $003E~$003F | 62~63 | 驅動/內部符號 | 驅動程式特定錯誤、內部符號 |
| $2100~$21FF | 8448~8703 | 系統錯誤 (SYS) | 配置檔、DLL 載入、暫存檔、非法重入 |
| $2200~$22FF | 8704~8959 | 物件未找到 (OBJ) | 資料表/記錄/索引/BLOB/語言驅動程式找不到 |
| $2300~$23FF | 8960~9215 | 資料損壞 (COR) | 表頭、索引、鎖檔、家族檔、.VAL 檔損壞 |
| $2400~$24FF | 9216~9471 | I/O 錯誤 (IO) | 讀寫失敗、目錄存取、檔案刪除、鎖定衝突 |
| $2500~$25FF | 9472~9727 | 資源/限制 (LIM) | 記憶體、檔案控制代碼、磁碟空間、游標、連線數上限 |
| $2600~$26FF | 9728~9983 | 資料完整性 (INT) | 鍵值違規、查核失敗、主從表關聯、參考完整性 |
| $2700~$27FF | 9984~10239 | 無效請求 (REQ) | 參數、檔案名、控制代碼、索引、欄位、表格、密碼錯誤 |
| $2800~$28FF | 10240~10495 | 鎖定違規 (LCK) | 記錄/表格/目錄鎖定、逾時、死結、獨佔存取失敗 |
| $2900~$29FF | 10496~10751 | 存取/安全 (ACC) | 欄位/表格/家族權限、加密、SQL 權限 |
| $2A00~$2AFF | 10752~11007 | 無效上下文 (CTX) | BLOB 狀態、驅動程式初始化、工作階段混用、只讀衝突 |
| $2B00~$2BFF | 11008~11263 | 作業系統錯誤 (OS) | 檔案不存在、權限、記憶體、裝置、共享違規、磁碟錯誤 |
| $2C00~$2CFF | 11264~11519 | 網路錯誤 (NET) | 初始化、用戶上限、.NET 版本、鎖定、SQL Server 連線 |
| $2D00~$2DFF | 11520~11775 | 選用參數 (OPT) | 參數遺漏、無效 |
| $2E00~$2EFF | 11776~12031 | 查詢處理器 (QBE/SQL) | 語法、運算式、群組、插入/刪除/修改、解析、BLOB 限制 |
| $2F00~$2FFF | 12032~12287 | 版本不符 (VER) | 引擎版本、索引、.VAL、BLOB、DLL、Server 版本不符 |
| $3000~$30FF | 12288~12543 | 功能不支援 (CAP) | 未實作、複寫、多連線、dBASE 運算式 |
| $3100~$31FF | 12544~12799 | 系統配置 (CFG) | 別名、資料庫類型、網路類型、配置參數 |
| $3200~$32FF | 12800~13055 | 警告 (WARN) | 物件隱含刪除/修改/截斷、欄位修剪、多筆記錄 |
| $3300~$33FF | 13056~13311 | 雜項 (MISC) | 檔案已存在、BLOB 修改、SQL 錯誤、Paradox 版本 |
| $3400~$34FF | 13312~13567 | 相容性 (CMP) | 排序順序、語言驅動程式版本 |
| $3500~$35FF | 13568~13823 | 資料字典 (DIC) | 字典損壞、結構描述、視圖、關聯、交換檔 |
| $3E00~$3EFF | 15872~16127 | 驅動程式特定 (DRV) | 驅動名稱/版本/類型、載入失敗、語言驅動程式、廠商初始化 |
| $3F00~$3FFF | 16128~16383 | 內部符號/資訊 (SYM) | 模組名稱、行號、原因、能力、限制、運算式等 |
高頻錯誤代碼速查與解決方案
系統層級 ($2100~$21FF)
| 代碼 | 訊息 | 常見成因 | 建議處理 |
| $2108 (8456) | Cannot locate IDAPI32.DLL | BDE 未安裝、路徑未加入 PATH、版本不符 | 重新安裝 BDE,確認 HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine 登錄 |
| $2109 (8457) | Cannot load IDAPI32.DLL | DLL 損壞、版本衝突、相依 DLL 遺失 | 檢查 idapi32.dll 版本,修復相依項 |
| $210A (8458) | Cannot load an IDAPI service library | 驅動程式 DLL 遺失(如 pdox32.dll, dbase32.dll) | 確認驅動程式目錄在 PATH 中 |
| $210B (8459) | Cannot create or open temporary file | 暫存目錄權限、磁碟滿、TEMP/TMP 環境變數錯誤 | 檢查磁碟空間、權限、環境變數 |
資料完整性與鎖定 ($2600~$28FF)
| 代碼 | 訊息 | 常見成因 | 建議處理 |
| $2601 (9729) | Key violation | 主鍵/唯一索引重複值 | 檢查插入/修改資料的唯一性 |
| $2605 (9733) | Master record missing | 參考完整性:主表記錄不存在 | 先新增主表記錄,或暫停檢查 |
| $2606 (9734) | Master has detail records | 嘗試刪除有明細的主記錄 | 先刪除明細,或設定級聯刪除 |
| $2801 (10241) | Record locked by another user | 多人同時編輯同一記錄 | 樂觀鎖定、縮短交易時間、使用者通知 |
| $280F (10255) | A deadlock was detected | 循環等待資源 | 統一存取順序、縮短交易、設定逾時 |
| $2813 (10259) | Couldn't perform the edit because another user changed the record | 樂觀鎖定衝突 | 重新讀取資料、合併變更、通知使用者 |
資源限制 ($2500~$25FF)
| 代碼 | 訊息 | 常見成因 | 建議處理 |
| $2501 (9473) | Insufficient memory for this operation | 記憶體不足、大型查詢、BLOB 處理 | 增加實體/虛擬記憶體、分批處理、關閉不用資料集 |
| $2503 (9475) | Insufficient disk space | 磁碟空間不足 | 清理磁碟、移動暫存檔、擴充磁碟 |
| $2506 (9478) | Too many open cursors | 未關閉的 TQuery/TTable 過多 | 確保 Close、使用 try..finally、增加 MaxCursors 設定 |
| $250B (9483) | Too many open tables | 同時開啟資料表超過限制 | 調整 idapi32.cfg 的 MAX OPEN TABLES |
查詢處理器錯誤 ($2E00~$2EFF) - 常見於 QBE/SQL
- $2E08 (11784) Invalid expression:運算式語法錯誤,檢查欄位名、運算子、括號配對。
- $2E28 (11816) Syntax error in expression:SQL/QBE 語法錯誤,對照 SQL 文法修正。
- $2E73 (11891) QBE syntax error:QBE 範例表格式錯誤,檢查範例元素、運算子。
- $2EB7 (11959) GROUP BY is required...:聚合與非聚合欄位混用時缺少 GROUP BY。
- $2EB8 (11960) INSERT/UPDATE not supported on autoincrement:自動編號欄位不可手動指定值。
排查實務建議
- 記錄完整代碼:攔截
EDBEngineError,記錄 Errors[0].ErrorCode 與 Message。
- 查閱對照表:依代碼範圍定位類別,再精確比對訊息。
- 啟用 BDE 追蹤:使用
BDE Administrator → Configuration → Drivers → Trace 產生詳細日誌。
- 檢查環境一致性:開發/測試/生產機的 BDE 版本、驅動程式、
idapi32.cfg 設定必須一致。
- 考慮移轉:BDE 已停止維護,新專案建議改用 FireDAC、dbExpress、ADO 或 ORM 框架。
結語
BDE 錯誤代碼體系雖然龐大,但掌握分類邏輯與高頻代碼,即可快速定位問題根因。隨著技術演進,建議逐步規劃資料存取層的現代化移轉,從根本上減少 BDE 相關風險。