一次将整个MS ACCESS迁移到MYSQL

时间:2015-08-01 13:55:55

标签: mysql ms-access

我将msaccess数据库迁移到mysql。 我知道如何逐桌表达:(创建odbc链接,然后右键单击表并导出)

由于我有40个表,并且因为我需要多次迁移此数据库,所以我希望自动执行此迁移。 有没有办法(例如vb脚本)呢?

提前致谢。

1 个答案:

答案 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