首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

使用 VBA + ADO + MyODBC 將 SQL Server 7.0 數據遷移至 MySQL

     編輯:MySQL 資料庫相關知識

背景

利用 VBA 編程配合 ADO 對象,通過 MyODBC 驅動實現 Microsoft SQL Server 7.0 到 MySQL 的數據遷移。適合熟悉 Office VBA 的財務、會計人員自動化處理數據導入。

前置條件

  1. 安裝 MyODBC 驅動(官網下載)
  2. 在 ODBC 數據源管理器中創建系統 DSN(如 mysql1),指向目標 MySQL 數據庫
  3. 確保 SQL Server 7.0 可正常連接(測試連接字符串)

核心 VBA 代碼

Sub MigrateMSSQLToMySQL()
    ' 通過 MyODBC 連接 MySQL,將 SQL Server 7 數據遷移至 MySQL
    Dim sConnect As String, sSql As String
    Dim cnMSSQL As New ADODB.Connection
    Dim cnMySQL As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim cm As New ADODB.Command

    ' 1. 連接 MySQL (via MyODBC DSN)
    sConnect = "DSN=mysql1"
    cnMySQL.Open sConnect

    ' 2. 連接 SQL Server 7 (OLEDB)
    sConnect = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;pwd=123456;Initial Catalog=softdown;Data Source=ntserver"
    cnMSSQL.Open sConnect

    ' 3. 從源表讀取數據
    sSql = "SELECT * FROM softinfo ORDER BY softnum"
    rs.Open sSql, cnMSSQL, adOpenKeyset, adLockReadOnly

    ' 4. 循環寫入目標表
    Do While Not rs.EOF
        sSql = "INSERT INTO softinfo VALUES (" & _
               Trim(rs(0).Value) & ", '" & _
               Trim(rs(1).Value) & "', '" & _
               Trim(rs(2).Value) & "', '" & _
               Trim(rs(3).Value) & "', '" & _
               Trim(rs(4).Value) & "', '" & _
               Trim(rs(5).Value) & "', " & _
               Trim(rs(6).Value) & ", " & _
               Trim(rs(7).Value) & ")"

        cm.ActiveConnection = cnMySQL
        cm.CommandType = adCmdText
        cm.CommandText = sSql
        cm.Execute

        rs.MoveNext
    Loop

    ' 5. 清理資源
    rs.Close: Set rs = Nothing
    cnMySQL.Close: Set cnMySQL = Nothing
    cnMSSQL.Close: Set cnMSSQL = Nothing
End Sub

關鍵點解析

  • 字段對應:代碼假設源表 softinfo 結構與目標表完全一致,實際遷移前請核對字段類型、長度、NULL屬性
  • 數據清洗:Trim() 去除首尾空格,防止字符串字段導入異常
  • 事務控制:大量數據建議啟用 ADO 事務(BeginTrans/CommitTrans),失敗時 RollbackTrans
  • 批量優化:單條 INSERT 效率低,可改用 LOAD DATA INFILE 或組裝批量 INSERT ... VALUES (...),(...) 語句
  • 字符集:MySQL 4.1+ 需在連接字符串加 CHARSET=gbk 或 utf8,避免中文亂碼

擴展建議

  1. 將表名、字段映射、連接參數提取到配置表/INI 文件,實現通用遷移工具
  2. 添加進度條、日誌記錄、錯誤重試機制
  3. 對於大表,考慮分批次遷移,避免事務日誌過大

現代替代方案

目前推薦使用專業 ETL 工具(如 Talend、Kettle/PDI、DataX)或 MySQL 官方 MySQL Workbench Migration Wizard,支持異構數據庫結構自動映射、數據類型轉換、增量同步,無需編寫代碼。

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