Что такое ConnectionString для создания OdbcConnection для доступа к файлу mdb в x64?

Расширяя этот вопрос Что такое ConnectionString для создания OdbcConnection для доступа к файлу mdb, я хотел бы знать, как написать строку подключения для подключения к файлу .mdb из 64-битного приложения, за исключением того, что на этот раз я пытаюсь сделать это из 64-битное приложение С++ вместо С#. Не уверен, что это имеет значение, поэтому пишу сюда :)

Когда я компилирую для 32-битной версии, я могу подключиться к своему файлу mdb с помощью

"driver={Microsoft Access Driver (*.mdb)};Dbq=mlog.mdb;UID=;PWD="

Я не уверен, что это оптимальный способ, но он работает.

Теперь мне нужно скомпилировать мое приложение в 64-битном режиме. строка подключения выше больше не работает, поэтому я проверил http://www.connectionstrings.com/access/ и попытался

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=mlog.mdb;Persist Security Info=False;"

но без успеха.

я использую

ret = SQLDriverConnect(dbc, 0, connectionstring, SQL_NTS, outstr, 1024, &outstrlen, SQL_DRIVER_NOPROMPT);
        if (SQL_SUCCEEDED(ret)) ...

чтобы попытаться подключиться. Но всегда терпит неудачу. когда я вызываю SQLGetDiagRec(), он возвращает пустые строки.

Я также установил 64-битные драйверы Access 2010. Проверка c:\windows\system32\odbcad32.exe на наличие установленного «драйвера доступа Microsoft (*.mdb, *.accdb)» версии 14.00.7010.1000 в ACEODBC.DLL.

Что здесь не так?


person marc40000    schedule 18.10.2013    source источник
comment
У вас есть 64-разрядная версия Access Database Engine установлен на вашей машине?   -  person Gord Thompson    schedule 19.10.2013
comment
Я думал, что этот вопрос возникнет, поэтому я добавил примечание об этом в конце Вопроса, отредактировав его.   -  person marc40000    schedule 19.10.2013
comment
Я не работал с Visual C++, но в C# объекты базы данных Sql... специфичны для SQL Server и не будут работать с драйверами OLEDB для Access (и других баз данных). Вместо этого должны использоваться объекты OleDb.... Существует ли OleDbDriverConnect эквивалент объекта SQLDriverConnect, который вы сейчас пытаетесь использовать?   -  person Gord Thompson    schedule 19.10.2013
comment
Хм интересно. Может быть ты прав. Но я еще не знаю. Меня всегда смущает, что такое JET, ODBC, OLDDB, ADODB. Есть эта страница msdn.microsoft.com/ en-us/library/ms692897%28v=vs.85%29.aspx, что примерно подводит итог, за исключением JET. Так должен ли я использовать/попробовать OLEDB или ADODB?   -  person marc40000    schedule 19.10.2013
comment
Ответ здесь предполагает, что ADO проще использовать, чем OLEDB, из приложений C/C++.   -  person Gord Thompson    schedule 19.10.2013


Ответы (1)


Если кто-то еще ищет решение, 64-разрядная версия OdbcConnection может подключаться к базам данных Access с помощью этой строки подключения:

Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=X:\fullpath\database.mdb;

Или, если вам нужен логин:

Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=X:\fullpath\database.accdb;Uid=MyLogin;Pwd=MyPassword;

Конечно, вам необходимо установить 64-битный драйвер базы данных доступа.

Вы можете найти его здесь: https://www.microsoft.com/en-us/download/details.aspx?id=54920

person ONC    schedule 25.06.2021