首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Builder 多資料庫系統遷移實戰:Access → MySQL + ADO

     編輯:關於C++

某桌面系統原使用 Access 97 + ASP 網頁查詢 + C++ Builder 維護工具,因 Access 為共享式資料庫,併發與網路擴展性不足,決定遷移至服務器型資料庫。本文完整記錄嘗試 Oracle 失敗、轉向 MySQL 成功、ADO 存取調優、ASP 相容性修正、ODBC 版本衝突排查的全過程。

遷移路徑與決策

  1. 嘗試 Oracle 7.3:安裝複雜、PATH 環境變數溢出導致 ODBC 驅動載入失敗、TEXT/MEMO 欄位遷移問題、客戶端部署門檻高 → 放棄。
  2. 選擇 MySQL + PHPTriad:免費、安裝自動化(含 Apache、PHP、phpMyAdmin)、ODBC 驅動簡單、phpMyAdmin 圖形化管理 → 採用。

MySQL 遷移關鍵步驟

  1. 安裝 PHPTriad:一鍵部署 MySQL + Apache + PHP + phpMyAdmin。
  2. 安裝 MyODBC 2.5:區分 95/NT 版本。
  3. 建立系統 DSN:名稱 必須以 -mysql 結尾(如 work-mysql),否則 MyODBC 拒絕連線。
  4. Access 匯出:檔案 → 另存為/匯出 → ODBC 資料庫 → 選擇 DSN → 逐表匯出。
  5. AutoNumber 欄位修正:phpMyAdmin 中將對應欄位 Extra = auto_increment。
  6. phpMyAdmin 中文化:修改 config.inc.php 的 require('chinese_gb.inc.php')。

C++ Builder ADO 存取調優

元件配置

  • ADOTable1:ConnectionString → Microsoft OLE DB Provider for ODBC Drivers → DSN work-mysql。
  • DataSource1 → ADOTable1;DBEdit/DBNavigator 綁定欄位。

關鍵 ODBC 選項

MyODBC 設定視窗中 勾選「Return matching rows」(或類似「Don't optimize...」選項),否則 MEMO 欄位顯示 (MEMO)、新增記錄長度受限、空值無法輸入。

ASP 相容性修正

原始碼(Access 直連)

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,提升可移植性。

ODBC 版本衝突排查

現象

ADOQuery 連續執行兩個 while (!Eof) 迴圈時出現 BOF or EOF is True 錯誤,單獨執行正常,其他機器正常。

根因

機器安裝 MDAC 2.6 中文版,與 BCB/ADO 相容性不佳。

解決

  1. 手動刪除 Windows 目錄下所有 ODBC* 檔案。
  2. 刪除 Program Files\Common Files\System 目錄。
  3. 重新安裝 MDAC 2.5 英文版。

建議

  • 開發環境固定 MDAC 版本,避免自動更新。
  • 部署腳本檢查並強制安裝指定 MDAC 版本。

專案總結與最佳實踐

階段關鍵決策避坑指南
資料庫選型免費、輕量、工具鏈完整 → MySQLDSN 命名規則、AutoNumber 手動補齊
存取技術ADO + OLE DB for ODBCMyODBC 選項優化 MEMO/長度問題
Web 相容ASP 全面改用標準 SQL避免 Recordset.Open("table") 非標準寫法
環境鎖定MDAC 2.5 英文版手動清理舊版、腳本化部署

此遷移案例展示了資料庫技術選型、驅動程式調優、舊代碼相容性改造、執行環境鎖定的完整工程思維,為同類專案提供寶貴參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved