【问题标题】:Can I use the Access Database Engine 2010 from a C++ program built with Visual Studio 2017?我可以从使用 Visual Studio 2017 构建的 C++ 程序中使用 Access Database Engine 2010 吗?
【发布时间】:2021-02-13 00:32:18
【问题描述】:

有没有办法让 DAO 在使用 Visual Studio 2017 构建的 MFC C++ 应用程序中与 Access Database Engine 2010 连接?我正在开发一个需要读取 Access 97 MDB 数据库的遗留应用程序,从我在线阅读的内容来看,Access Database Engine 2016 中删除了对这些数据库的支持。我的 PC 上安装了两个版本的数据库引擎,但是使用 VS 2017 构建的应用程序似乎只连接到 2016 版本。当应用程序使用 VS 2015 构建时,它运行良好。有没有办法让我的应用程序使用 2010 版本,以便我可以打开这些旧数据库? (回到 VS 2015 不是一个选项)

【问题讨论】:

    标签: c++ visual-studio ms-access mfc dao


    【解决方案1】:

    Windows 的每个副本 - 回到 Windows 98SE 都安装了 JET (mdb) Access 数据库引擎的副本。因此,如果您只想读取和使用 mdb 文件 - 那么 JET 数据引擎的内置默认副本应该可以工作。可能更高版本的windows有更新版本的JET,因此无法读取a97 mdb文件,但我相信windows上安装的默认引擎可以读取这些文件。

    因此您不需要也不应该安装数据引擎的副本。您可以使用 .NET ODBC 提供程序,也可以使用 .net oleDB 提供程序。这两个提供程序都应该能够消费、使用和打开 mdb 文件,而无需您安装任何附加软件。

    但是,您必须确保您的项目设置(强制)使用 x86 编译,并且不要使用“任何 CPU”或当然 x64 位进行部署,因为这样,您不能使用 + 消耗 x32 位.dll 和软件(如果您的项目以 x64 位运行)。

    编辑:所以要确定您使用的是这个旧的和预安装的数据引擎吗?只是不要在连接字符串中使用“ACE”。内置的 .net (Visual Studio) 连接构建器将允许您设置/选择“JET”(旧)mdb 数据引擎,而不是较新的 (ACE) accDB 数据引擎。

    您在此处看到此选项:

    然后:

    那么从上面来看,如果您选择 JET 而不是 ACE?然后,您使用自 windows 98SE 以来在每个 windows 副本上默认安装的 20 年 JET 副本。而且这个选择应该允许你打开 a97 mdb 文件,而且好处是你不需要安装 ACE 数据引擎,也不需要连接组件包 - 它已预安装在 windows 上。

    如果你打算使用 accDB 格式?然后你必须安装 ACE。但是,JET 已经并且应该已经安装了。

    编辑: 我看到你在谈论 c++ 而不是 c#/vb.net。然而,上述建议仍然有效。因此,您仍然可以选择在代码中使用 ODBC 或 oleDB - 并且如前所述,两者都应该工作。

    【讨论】:

    • 谢谢,是的,它的 x86,但这个应用程序是 MFC C++ 并使用 DAO 库。您提供的信息似乎适用于 .NET。更具体地说,在调用 DAOWorkspace::OpenDatabase() 时会出现打开这些旧 MDB 的问题。
    • 确实 - 我确实编辑并跟进这不是 .net。我不确定我是否有要测试的 97 格式的 mdb。如果您可以打开较新的 mdb 文件而不是较旧的文件?那么 JET 4.0 很可能无法打开 a97 mdb 文件。因此,请检查您是否可以打开“一些”mdb 文件而不是全部。我尝试检查/查看我是否有一个 a97 mdb 文件并且可以使用 JET 4.0 打开它 - 你应该能够 - 我愿意在这里得到更正。编辑:这是 dao 3.6 - 它应该可以工作。
    • 我可以用这段代码打开 Access 2000 MDB,只是不能打开 Access 97。当我将 DAOWorkspace::OpenDatabase() 调用中的连接字符串设置为空字符串以外的任何内容时,我收到一条错误消息,提示“ODBC--连接到 '' 失败。”
    • 哎哟!!既然你可以打开 a2000 mdb,那么你必须挖掘一个旧的 DAO 副本。我不确定这会有多容易。 DAO 和 mdb 文件格式仅适用于 Access 2003。2007 年,它们转换为 ACE。所以我很惊讶你不能打开a97格式。我想也许这是一个访问 2.0 mdb !所以 Access 2003(和 JET)总是可以打开 a97 mdb 文件。我想知道那个mdb文件是否损坏了?我认为ACE 2010是打开a97的最后一个版本,但是纯JET vs ACE?据我所知,这应该有效。
    • 只是为了说清楚?我注意到并提到 Access 2003(17 年前)是 JET for Access 的最后一个版本。该版本可以打开 a97 mdb 文件。甚至是Windows 10?嗯,JET 与 2003 年的 JET 4.0 相同——因此我很惊讶您无法打开该 mdb 文件。如前所述,也许 mdb 是 1992 年的 Access 2.0 或 a95,或者喘不过气来!!! - 所以,JET 应该能够使用该数据库。如前所述,ACE 不会。虽然 ACE 和 JET 都安装了 DAO 提供程序,但 .dll 可能已被修改或升级为 ACE“dao”,但 mdb 文件和 a97 文件应该打开。
    猜你喜欢
    • 2019-06-05
    • 1970-01-01
    • 2019-07-02
    • 2018-02-19
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多