如何使用ODBC创建MDB文件?

时间:2018-07-22 11:23:25

标签: c++ odbc

我想用我的程序创建一个新的mdb文件,但失败,错误代码为6,对应于ODBC_ERROR_COMPONENT_NOT_FOUND,并显示以下本地化消息:可编写的可解释性Dans le registre 可以翻译为:在注册表中找不到组件

我不确定注册表中到底需要什么,但是计算机中是否存在以下注册表项及其数据:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)

那我做错了吗?

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <odbcinst.h>


int main()
{
    _setmode(_fileno(stdout), _O_U16TEXT);

    LPCWSTR sDriver = L"Microsoft Access Driver (*.mdb)";
    LPCWSTR wcAttrs = L"CREATE_DB=.\\Test.mdb General\0";

    std::wcout << L"Check: " << wcAttrs << std::endl;

    SQLConfigDataSource(NULL, ODBC_ADD_DSN, sDriver, wcAttrs);

    SQLRETURN sReturn;
    DWORD pfErrorCode;
    wchar_t lpszErrorMsg[256];

    sReturn = SQLInstallerError(1, &pfErrorCode, lpszErrorMsg, SQL_MAX_MESSAGE_LENGTH, 0);

    std::wcout << L"pfErrorCode: " << pfErrorCode << std::endl;
    std::wcout << L"Error message: " << lpszErrorMsg << std::endl;

    std::cin.get();
    return 0;
}

如果要编译此代码,请不要忘记使用 odbccp32.lib legacy_stdio_definitions.lib

1 个答案:

答案 0 :(得分:0)

单独创建文件的代码很好。错误的是计算机的配置。 在注册表中,对于 32位程序,ODBC驱动程序定义位于 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ ODBC \ ODBCINST.INI \

但是 64位的用户会查看 HKEY_LOCAL_MACHINE \ SOFTWARE \ ODBC \ ODBCINST.INI \ 。在当前情况下,这些位置丢失了。

ODBC驱动程序是特定于平台的,因此它们可用于32位应用程序,但不适用于同一台计算机上的64位应用程序。

在我的情况下,安装了x64计算机,32位MS Office套件以及所有捆绑的32位ODBC驱动程序。上面的代码在64位模式下失败,但在32位模式下编译时成功创建了.mdb文件。 (相对路径顺便说一句)。

因此,此问题的最终解决方案是下载并安装用于x64平台(https://www.microsoft.com/en-us/download/details.aspx?id=54920)的ODBC驱动程序

“管理工具”面板中不需要配置,因为它用于指向现有数据库。

感谢seccpur将我指向正确的方向。