如何以编程方式将Access 1997 .mdb转换为Access 2007 .accdb

时间:2016-05-16 19:12:16

标签: ms-access vbscript

我正在构建一个遍历文件夹结构的应用程序的启动过程,从给定的根路径开始,并将所有找到的Access 1997 .mdb文件转换为较新的Access 2007/2010 .accdb格式。但是,在进行实际的文件转换时,我遇到了一些麻烦。

我使用Microsoft的Access Interop API(https://msdn.microsoft.com/en-us/library/office/ff193465.aspx)来处理转换,因此必须使用VBScript编写。脚本如下:

Dim app 
Set app = CreateObject("Access.Application")
app.ConvertAccessProject "C:\Users\[User]\Access Conversion Utility\sample.mdb", "C:\Users\[User]\Access Conversion Utility\converted.accdb", acFileFormatAccess12

运行时,我收到错误"项目无法转换为此格式。该项目只能转换为Access 2000或更新格式。"然而,无论文件参数枚举值如何,都会显示相同的错误消息,无论是acFileFormatAccess97' acFileFormatAccess97'或者' acFileFormatAccess2000'。有谁知道这个错误的细节以及可能的解决方案是什么?我已经尝试更改第二个参数的扩展名,认为这是问题的一部分,但这并未对错误消息进行任何更改。

我正在使用的示例文件可以在Access中打开,只是转换本身失败了。

无论如何,如果有人有更好的想法或方法以编程方式进行转换,我很乐意听到,但这是我能找到的唯一一个。计划是从用C#编写的GUI应用程序运行此脚本,但也允许通过命令行运行应用程序。

3 个答案:

答案 0 :(得分:3)

  

我使用微软的Access Interop API ......所以这必须用VBScript编写。

无意义。我刚刚在C#(Visual Studio 2010)中尝试过这种方法,对于Access 2010,它运行良好:

// COM reference required for project
//     Microsoft Access 14.0 Object Library

var app = new Microsoft.Office.Interop.Access.Application();
app.ConvertAccessProject(
        @"C:\Users\Public\test\a97test.mdb",
        @"C:\Users\Public\test\a2007converted.accdb",
        Microsoft.Office.Interop.Access.AcFileFormat.acFileFormatAccess2007);
app.Quit();

请注意,这几乎肯定会与Access 2013及更高版本一起使用,但对于那些版本的Access而言,COM Interop的VBScript实现也不会,因为它们绝对拒绝打开Access_97(及更早版本)数据库。

答案 1 :(得分:0)

普通VBScript不知道ac *常量。所以要正确定义它们。

答案 2 :(得分:0)

问题是双重的。

首先,Access 2007及更高版本不会读取旧版格式,而不是Access 2000的 JET 4 格式。

其次,2007格式的常量是 acFileFormatAccess2007 ,而不是acFileFormatAccess12,它是常量的数值12。

关于这一点,文档是错误的:

AcFileFormat Enumeration (Access)

因此,您必须获得较旧版本的Access才能首次转换为JET 4,然后再转换为2007格式。

编辑:

或者,当然,正如戈德所说的那样。