某桌面系統原使用 Access 97 + ASP 網頁查詢 + C++ Builder 維護工具,因 Access 為共享式資料庫,併發與網路擴展性不足,決定遷移至服務器型資料庫。本文完整記錄嘗試 Oracle 失敗、轉向 MySQL 成功、ADO 存取調優、ASP 相容性修正、ODBC 版本衝突排查的全過程。
-mysql 結尾(如 work-mysql),否則 MyODBC 拒絕連線。Extra = auto_increment。config.inc.php 的 require('chinese_gb.inc.php')。ADOTable1:ConnectionString → Microsoft OLE DB Provider for ODBC Drivers → DSN work-mysql。DataSource1 → ADOTable1;DBEdit/DBNavigator 綁定欄位。MyODBC 設定視窗中 勾選「Return matching rows」(或類似「Don't optimize...」選項),否則 MEMO 欄位顯示 (MEMO)、新增記錄長度受限、空值無法輸入。
RS_COUNT.open "SELECT * FROM count", LK_CONN, 3, 3
Zcount = RS_COUNT("Count")
RS_COUNT("Count").Value = Zcount + 1
RS_COUNT.Update
MySQL ODBC 不支援無 SQL 的 Recordset.Open "table" 寫法。
RS_COUNT.open "SELECT * FROM count", LK_CONN, 3, 3
// 其餘邏輯不變
結論:統一使用標準 SQL,提升可移植性。
ADOQuery 連續執行兩個 while (!Eof) 迴圈時出現 BOF or EOF is True 錯誤,單獨執行正常,其他機器正常。
機器安裝 MDAC 2.6 中文版,與 BCB/ADO 相容性不佳。
Windows 目錄下所有 ODBC* 檔案。Program Files\Common Files\System 目錄。| 階段 | 關鍵決策 | 避坑指南 |
|---|---|---|
| 資料庫選型 | 免費、輕量、工具鏈完整 → MySQL | DSN 命名規則、AutoNumber 手動補齊 |
| 存取技術 | ADO + OLE DB for ODBC | MyODBC 選項優化 MEMO/長度問題 |
| Web 相容 | ASP 全面改用標準 SQL | 避免 Recordset.Open("table") 非標準寫法 |
| 環境鎖定 | MDAC 2.5 英文版 | 手動清理舊版、腳本化部署 |
此遷移案例展示了資料庫技術選型、驅動程式調優、舊代碼相容性改造、執行環境鎖定的完整工程思維,為同類專案提供寶貴參考。