我将msaccess数据库迁移到mysql。 我知道如何逐桌表达:(创建odbc链接,然后右键单击表并导出)
由于我有40个表,并且因为我需要多次迁移此数据库,所以我希望自动执行此迁移。 有没有办法(例如vb脚本)呢?
提前致谢。
答案 0 :(得分:0)
考虑以下VBA解决方案,该解决方案假设已在MySQL中创建了所有40个相应的表,并且您已安装了MySQL ODBC驱动程序。该过程实质上将所有表链接到Access数据库,并在记录集循环中运行追加查询。
首先,创建一个MySQL表列表的Excel文件,假定它们与带查询的Access表的名称相同:
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = "table";
然后在Access VBA中,将以下内容作为子例程或函数运行:
Dim db As DAO.Database
Dim rst As DAO.Recordset
' Import MySQL table list
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "MySQLTables", _
"C:\Path\To\MySQLExcelList.xlsx", True
Set db = currentdb()
Set rst = db.OpenRecordset("MySQLTables", dbOpenDynaset)
rst.MoveLast
rst.MoveFirst
Do While Not rst.EOF
' LINK TABLES
' ODBC DSN CONNECTION
DoCmd.TransferDatabase acLink, "ODBC Database", _
"ODBC;DSN=NameOfDSN;server=servername;database=dbname;" _
& "UID=username;PWD=password;", acTable, rst![column_name], "mysql_" & rst![column_name]
' ODBC DSN-LESS CONNECTION
'DoCmd.TransferDatabase acLink, "ODBC Database", _
' "ODBC;DRIVER={MySQL ODBC 5.3 Unicode Driver};server=servername;database=dbname;" _
' & "UID=username;PWD=password;", acTable, rst![column_name], "mysql_" & rst![column_name]
' APPENDS DATA
db.Execute "INSERT INTO mysql_" & rst![column_name] & _
" SELECT * FROM " & rst![column_name] & ";", dbFailOnError
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set db = Nothing