[英]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.lib和legacy_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.