繁体   English   中英

如何使用ODBC创建MDB文件?

[英]How to create a mdb file with 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.liblegacy_stdio_definitions.lib

单独创建文件的代码是好的。 错误的是计算机的配置。 在注册表中,对于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平台的ODBC驱动程序( https://www.microsoft.com/zh-cn/download/details.aspx?id=54920

管理工具面板中不需要进行任何配置,因为它用于指向已经存在的数据库。

感谢seccpur为我指出了正确的方向。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM