如何无需ODBC将phpMyAdmin导出的test.sql导入MS Access 2016?
不用ODBC导入MySQL SQL文件到MS Access 2016的方法
没问题,我来给你几个实用的方案,不用ODBC就能搞定这个需求:
方法1:转成CSV格式后导入(最适合新手)
这是最直观的方法,把SQL里的数据提取出来转成Access能直接识别的CSV:
- 用文本编辑器(比如Notepad++)打开你的
test.sql文件,定位到所有INSERT INTO开头的数据插入语句。 - 清理语句内容:把
INSERT INTOtable_name(列名...) VALUES (和结尾的);去掉,把每个括号里的内容单独拆成一行,比如把(val1, "val2"), (val3, "val4")拆成两行:val1,"val2"和val3,"val4"。注意保留字段里的引号,避免逗号分隔出错。 - 把清理后的内容按表保存成
xxx.csv文件(每个表对应一个CSV)。 - 打开Access 2016,新建空白数据库,点击外部数据选项卡 → 选择文本文件,选中你的CSV文件,跟着导入向导设置分隔符(一般是逗号)、字段类型,完成导入。
方法2:用VBA脚本直接解析SQL(适合有编程基础的用户)
如果你的表比较多,手动转CSV太麻烦,可以写个简单的VBA脚本自动处理:
- 打开Access,新建空白库,按
Alt + F11打开VBA编辑器。 - 插入一个新模块,粘贴下面的基础代码(记得替换成你的SQL文件路径):
Sub ImportMySQLSQLToAccess() Dim filePath As String Dim fileContent As String Dim fso As Object, ts As Object Dim sqlLines As Variant, i As Integer ' 替换成你的test.sql文件路径 filePath = "C:\你的文件路径\test.sql" ' 读取SQL文件内容 Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.OpenTextFile(filePath, 1) fileContent = ts.ReadAll ts.Close ' 按分号分割SQL语句(注意:如果字段里有分号,这个逻辑需要额外调整) sqlLines = Split(fileContent, ";") For i = LBound(sqlLines) To UBound(sqlLines) Dim stmt As String stmt = Trim(sqlLines(i)) If stmt <> "" Then ' 把MySQL语法转换成Access支持的格式 stmt = Replace(stmt, "`", "[") ' 把MySQL的`换成Access的[] stmt = Replace(stmt, "`", "]") stmt = Replace(stmt, "INT", "Number") ' 数据类型转换 stmt = Replace(stmt, "VARCHAR(255)", "Text(255)") stmt = Replace(stmt, "DATETIME", "Date/Time") ' 执行SQL语句,捕获错误 On Error Resume Next CurrentDb.Execute stmt, dbFailOnError If Err.Number <> 0 Then Debug.Print "执行失败的语句:" & stmt Err.Clear End If On Error GoTo 0 End If Next i MsgBox "导入完成!可以查看即时窗口看是否有失败的语句" End Sub - 运行这个宏,它会自动创建表并插入数据。注意:这个是基础版,如果你的SQL里有ENUM、大文本字段或者特殊字符,需要额外调整代码里的转换逻辑。
方法3:用第三方工具转换(适合大量数据/多表场景)
如果上面两种方法都嫌麻烦,可以用专门的数据库转换工具,比如DBConvert for MySQL & Access(有免费试用版),步骤很简单:
- 打开工具,加载你的
test.sql文件,选择目标格式为MS Access。 - 设置好输出的Access数据库路径,点击转换按钮,工具会自动处理语法和数据类型的转换,直接生成可用的Access文件。
内容的提问来源于stack exchange,提问作者chowchow




