利用 VBA 編程配合 ADO 對象,通過 MyODBC 驅動實現 Microsoft SQL Server 7.0 到 MySQL 的數據遷移。適合熟悉 Office VBA 的財務、會計人員自動化處理數據導入。
mysql1),指向目標 MySQL 數據庫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() 去除首尾空格,防止字符串字段導入異常BeginTrans/CommitTrans),失敗時 RollbackTransINSERT 效率低,可改用 LOAD DATA INFILE 或組裝批量 INSERT ... VALUES (...),(...) 語句CHARSET=gbk 或 utf8,避免中文亂碼目前推薦使用專業 ETL 工具(如 Talend、Kettle/PDI、DataX)或 MySQL 官方 MySQL Workbench Migration Wizard,支持異構數據庫結構自動映射、數據類型轉換、增量同步,無需編寫代碼。