Я прохожу через множество статей и форумов об этом, и я до сих пор не нашел своего решения. Несмотря на то, что на этом сайте есть несколько сообщений.Невозможно подключиться к базе данных Microsoft Access (C++)
Они заявляют такие вещи, как ответы:
Установите это: http://www.microsoft.com/en-us/download/details.aspx?id=13255 Я не могу установить версию x86, becouse У меня есть офис x64 2010. Я однако установил 64-разрядную версию этого пакета ,
Установите этот http://www.microsoft.com/en-us/download/details.aspx?id=23734 Я пробовал, нет никаких результатов.
Убедитесь, что приложение настроено верно (т. Е. X86) Я на 100% уверен, что мое приложение 32 бит.
Моя рабочая среда выглядит следующим образом:
Visual Studio 2012 профессиональный
Coding язык C++
Microsoft Office 2010
Windows 8 x64
Это код, который я использую:
class Credential
{
public:
TCHAR CredentialID[3];
TCHAR CredentialName[255];
BEGIN_COLUMN_MAP(Credential)
COLUMN_ENTRY(1, CredentialID)
COLUMN_ENTRY(2, CredentialName)
END_COLUMN_MAP()
};
и это:
try
{
CDataSource ds;
CSession session;
ATL::CCommand<CAccessor<Credential>> cust;
HRESULT hr = CoInitialize(0);
if(FAILED(hr))
{
Console_Output("Can't start COM!?\n");
return;
}
hr = ds.OpenFromInitializationString(L"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MPFDatabase.accdb;");
Console_Output("%d\n", hr);
if(FAILED(hr))
{
Console_Output("Can't open Nwind\n");
return;
}
hr = session.Open(ds);
if(FAILED(hr))
{
Console_Output("Can't open Nwind SESSION\n");
ds.Close();
return;
}
TCHAR mySQL[] = "SELECT * FROM Credential";
hr = cust.Open(session, mySQL);
if(FAILED(hr))
{
Console_Output("Can't open Nwind TABLE\n");
session.Close();
ds.Close();
return;
}
while(cust.MoveNext() == S_OK)
{
Console_Output("%s -- %s\n", cust.CredentialID, cust.CredentialName);
}
cust.Close();
session.Close();
ds.Close();
}
catch(std::exception &Ex)
{
Console_Output("ex: %s\n", Ex.what());
}
добраться до точки, где она называет ds.OpenFromInitializationString, но затем он либо останавливается мое приложение без каких-либо уведомлений (без исключения). Или я дошел до того, что он будет печатать на моей консоли «Невозможно открыть Nwind \ n».
Эти 2 результата зависят от того, что я установил из предлагаемых ответов.
Я пробовал абсолютные и относительные пути для своего источника данных. Я на 100% уверен, что он не заблокирован или что-то подобное. Я создал базу данных самостоятельно, и она состоит всего из двух таблиц, ничего особенного.
Если я список моих поставщиков в Windows PowerShell версии я получаю эти провайдеры:
SQLOLEDB
MSQLAP
MSQLAP
MSDataShape
SQLNCLI11
Microsoft.ACE.OLEDB.12.0
ADsDSOObject
SQLNCLI11 Enumerator
Windows Search Data Source
MSDASQL
MSDASQL Enumerator
SQLOLEDB Enumerator
MSDAOSP
Так туз двигатель действительно установлен, как вы можете видеть.
EDIT:
Забыл упомянуть, что она относительно локального файла ACCDB сделал в доступе мс 2010 на моем компьютере. В случае, если это не ясно.
Добро пожаловать в переполнение стека!Обратите внимание, что теги стоят отдельно и не могут быть объединены для создания понятий. То есть, объединение '[microsoft]', '[access]' и '[database]' не означает то же, что и тег '[ms-access]'. Всегда обязательно прочтите полезные описания, которые появляются при выборе тегов! – Charles