如何使用ODBC创建mdb文件

How to create a mdb file with ODBC?

本文关键字:mdb 文件 创建 ODBC 何使用      更新时间:2023-10-16

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

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

HKEY_LOCAL_MACHINESOFTWAREWow6432NodeODBCODBCINST.INIMicrosoft 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";
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

单独创建文件的代码很好。问题出在电脑的配置上。在注册表中,ODBC驱动程序定义位于HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST。INI\用于32位程序。

但是64位可以查看HKEY_LOCAL_MACHINE\SOFTWARE\ODBCINST。INI\在本例中,其中缺少。

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

在我的案例中,是一台x64计算机,安装了一个32位的MS Office套件,以及所有捆绑的32位ODBC驱动程序。上面的代码在64位模式下失败,但在32位模式下编译时成功创建了.mdb文件。(相对路径工作良好BTW(。

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

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

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