Как получить доступ к базе данных Microsoft Access 2013 из delphi XE2?

Мне интересно, как подключиться к базе данных MS Access 2013 из Delphi XE 2? Я обычно использую «Provider=Microsoft.ACE.OLEDB.12.0» для MS Access 2010, но он больше не работает с 2013? любая идея ??


person Dreamer64    schedule 06.04.2013    source источник


Ответы (1)


Я только что протестировал следующий код VBScript на машине Windows_7 с 64-разрядной версией Access_2013...

Option Explicit
Dim con, rst
Set con = CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\Gord\Desktop\Database1.accdb;"
Set rst = CreateObject("ADODB.Recordset")
rst.Open "SELECT Field1 FROM Table1", con
Wscript.Echo rst("Field1").Value
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
Wscript.Echo "Done."

... и это сработало нормально, поэтому я не верю, что указанная вами строка Provider= является проблемой сама по себе. Должно быть что-то еще не так с вашей настройкой.

РЕДАКТИРОВАТЬ

Сравнение двух машин с Windows_7, одной с 64-разрядной версией Office_2010, а другой с 64-разрядной версией Office_2013, выявило важную разницу:

  • На машине с 64-разрядной версией Office_2010 были установлены как 32-разрядная, так и 64-разрядная версии ядра СУБД Access (ACE).

  • На машине с 64-разрядной версией Office_2013 была только 64-разрядная версия ACE. 32-битной версии ACE НЕ было.

Повторный запуск моего теста VBScript подтвердил это:

C:\__tmp>c:\windows\system32\cscript.exe /nologo oledbTest.vbs
Hello
Done.

C:\__tmp>c:\windows\sysWOW64\cscript.exe /nologo oledbTest.vbs
C:\__tmp\oledbTest.vbs(4, 1) ADODB.Connection: Provider cannot be found. It may not be properly installed.

К счастью, пользователи 64-разрядной версии Office_2013 могут загрузить и установить 32-разрядную версию ACE с здесь, если у них есть 32-разрядные приложения, которым необходимо работать с файлами .accdb.

Я подозреваю, что для пользователей 32-разрядной версии Office_2013 в 64-разрядной Windows ситуация такая же, как и для пользователей 32-разрядной версии Office_2010: у них есть только 32-разрядная версия ACE, и они не могут установить 64-разрядную версию, если только они сначала удаляют 32-разрядный Office. Итак, если у вас установлен 32-разрядный Office и вы хотите запустить 64-разрядное приложение, которое должно работать с файлами .accdb, я считаю, что вам «не повезло». (Увы, я не могу проверить это, так как у меня есть только 64-разрядная установка Office_2013.)

person Gord Thompson    schedule 06.04.2013
comment
После установки MS Access 2013 больше нет Provider=Microsoft.ACE.OLEDB.12.0!!! - person Dreamer64; 06.04.2013
comment
@МС Да, есть. Мой ответ это доказал. - person Gord Thompson; 06.04.2013
comment
Поставщик сообщений об ошибках не найден, он работал, когда я использовал ms access 2010 на том же компьютере, но после того, как я удалил его и установил ms access 2013, он исчез, и я больше не могу использовать этого провайдера или подключаться к базам данных ms access !! - person Dreamer64; 06.04.2013
comment
@MS Найдите файлы C:\Program Files\Common Files\Microsoft Shared\OFFICE15\ACEOLEDB.DLL и C:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\ACEOLEDB.DLL. Можете ли вы найти любой из них? Оба? Никто? - person Gord Thompson; 06.04.2013
comment
ммм, я могу найти только C:\Program Files\Common Files\Microsoft Shared\OFFICE15\ACEOLEDB.DLL, но не в каталоге x86 !! - person Dreamer64; 06.04.2013
comment
@MS У вас есть 64-битная версия ACE, но не 32-битная версия. Вы можете загрузить и установить 32-разрядную версию по ссылке в (исправленном) ответе выше. - person Gord Thompson; 06.04.2013