如何迁移Access数据库的Import/Export Specifications及优化其保存方式?
Access导入/导出规范迁移与备份方案
一、非手动迁移现有规范的方法
1. 直接迁移系统表数据
Access的导入导出规范实际存储在MSysIMEXSpecs(规范主信息)和MSysIMEXColumns(列映射信息)两个系统表中,操作步骤:
- 打开原数据库(确保能正常读取),导出这两个表的数据为CSV或Access表格式;
- 打开新数据库,开启系统对象显示:「文件」→「选项」→「当前数据库」,勾选「显示系统对象」;
- 将导出的两个表数据导入到新数据库的对应系统表中,完成规范迁移。
2. 用VBA读取并重建规范
如果原数据库仍支持VBA访问,可编写代码读取原库的规范数据,在新库中自动重建:
' 读取原库规范并在当前库重建 Sub MigrateIMEXSpecs() Dim srcDb As DAO.Database Dim rsSpecs As DAO.Recordset, rsCols As DAO.Recordset Dim destDb As DAO.Database Dim newSpec As ImportExportSpecification Set srcDb = OpenDatabase("C:\Path\To\Your\Old.accdb") Set destDb = CurrentDb ' 读取规范主记录 Set rsSpecs = srcDb.OpenRecordset("SELECT * FROM MSysIMEXSpecs") Do While Not rsSpecs.EOF ' 创建新规范 Set newSpec = destDb.CreateImportExportSpecification( _ rsSpecs!SpecName, _ rsSpecs!SpecType, _ rsSpecs!TableName, _ rsSpecs!SourceFileName _ ) ' 复制基础属性 newSpec.FieldDelimiter = rsSpecs!FieldDelim newSpec.TextQualifier = rsSpecs!TextQualifier newSpec.CodePage = rsSpecs!CodePage newSpec.Save ' 复制列映射 Set rsCols = srcDb.OpenRecordset("SELECT * FROM MSysIMEXColumns WHERE SpecID = " & rsSpecs!SpecID) Do While Not rsCols.EOF newSpec.ColumnMappings.Add rsCols!SourceColumn, rsCols!DestinationColumn rsCols.MoveNext Loop rsCols.Close rsSpecs.MoveNext Loop rsSpecs.Close srcDb.Close Set newSpec = Nothing Set rsSpecs = Nothing Set srcDb = Nothing End Sub
注意:运行前需确保原数据库的系统表权限开放,且引用了DAO库。
二、未来规范的保存与恢复方案
- 定期导出规范到外部文件:写个简单的VBA脚本,定时把
MSysIMEXSpecs和MSysIMEXColumns导出为CSV文件,存到数据库外的安全目录。恢复时直接导入这两个文件到新库的对应系统表即可。 - 将规范参数嵌入脚本:如果规范数量少,直接把导入导出的关键参数(比如分隔符、列对应关系、文件路径)写在VBA代码里,不再依赖系统中的规范存储。这样迁移数据库时,复制脚本就能直接用,不用管规范的迁移。
- 建立规范模板库:单独建一个空的Access库作为模板,每次新增或修改规范后,把
MSysIMEXSpecs和MSysIMEXColumns的对应记录同步到这个模板库。后续需要恢复时,直接从模板库导入这些记录到目标数据库。
内容的提问来源于stack exchange,提问作者Radio Doc
相关产品推荐
相关产品推荐

