我正在构建一个遍历文件夹结构的应用程序的启动过程,从给定的根路径开始,并将所有找到的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应用程序运行此脚本,但也允许通过命令行运行应用程序。
答案 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格式。
编辑:
或者,当然,正如戈德所说的那样。