簡體   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