Похоже, что все способы прямого доступа к базе данных SQL Server из проекта VBA устарели:
Что я пропустил? Каков официальный, одобренный Microsoft способ доступа к базе данных SQL Server из VBA (который, в конце концов, не устарел и по-прежнему является официальным языком разработки, включенным в Office 2013)?
Ответ 2
Правильный и будущий способ - использовать объектную модель ACE. Вы на 100% правильны, что родной oleDB удаляется с SQL-сервера. Также очень важно отметить, что "общее" сообщество разработчиков начало сбросить ADO, когда вышел .net(поставщик ado.net - ОЧЕНЬ другой зверь и один не зависит от oleDB, а от sqlprovider).
Поэтому из-за этого в нашей отрасли происходят значительные тенденции.
Мы отходим от oleDB. Это вообще технология только окон. С ростом iPads, смартфонов, Android и т.д., Тогда у вас нет таких специфичных для платформы поставщиков, и у них нет oleDB. Таким образом, вы должны вернуться назад TOWARDS, используя стандарты Open Database Connectivity (ODBC). Oracle, Microsoft, MySQL заявили, что это будущий путь и выбор.
В то время как JET считается устаревшим, ACE не является.
SINCE Access 2007 (теперь это полностью 3 версии), вы НЕ И НЕ ДОЛЖНЫ иметь ссылку на DAO. Таким образом, для последних 3 версий Access вам не нужна и не нужна ссылка на библиотеку объектов DAO.
Теперь вы должны использовать новый встроенный механизм базы данных ACE. Это означает, что вам НЕ нужна отдельная ссылка на DAO.
Для двигателя ACE есть несколько преимуществ:
Вам больше не нужна ссылка DAO.
Как только ссылка на движок данных позаботится о предыдущих двух ссылках на библиотеку.
Существует доступная версия для x32 и x64 (поэтому приложения .net и т.д. могут использовать x64-разрядную версию этого механизма данных). JET был только x32.
Поставщик ACE продолжает получать обновления и улучшения. То же самое нельзя сказать о JET или на самом деле много для ADO.
ACE теперь поддерживает процедуры хранения и триггеры таблиц. Он также поддерживает списки SharePoint, которые основаны на веб-сервисах.
Также были внесены изменения в Access/ACE для работы с SQL Azure.
Для использования Access с SQL-сервером вы просто используете ACE и связанные таблицы. Как отмечалось, тренд от ADO MUCH начался около 13 лет назад, когда .net появился на сцене.
Таким образом, стандартным подходом и рекомендацией является ACE + odbc.
Итак, вы ничего здесь не пропустили. Сбивание с толку связано со статьей, в которой состояние JET обесценивается, но THEN не учитывает ОЧЕНЬ важную деталь, что Access для THE LAST 3 теперь НЕ использует JET, но использует новую библиотеку под названием ACE.
ЗНАЧИТЕЛЬНО, что вам больше не нужна и не нужна ссылка на DAO в ваших приложениях доступа.
Вы, конечно же, используете совместимую библиотеку DAO, и она по-прежнему даже рекомендует вам прикрепить ваш код reocrdset с помощью DAO (так что старый существующий код будет работать отлично, если, если вы сделали это в прошлом, или вы всегда оставляли DAO квалификатор при объявлении наборов записей.
А для таких вещей, как sql pass, вы просто можете использовать сохраненный проход, хотя запрос, и выполните следующее:
CurrentDb.QueryDefs("MyPass").Execute
или как насчет некоторого t-sql, вы можете сделать это:
With CurrentDb.QueryDefs("MyPass")
.SQL = "ALTER TABLE Contacts ADD MiddleName nvarchar(50) NULL"
.Execute
End If
или вызовите процедуру хранения по вашему выбору "на лету" с параметром
With CurrentDb.QueryDefs("MyPass")
.SQL = "Exec MyStoreProc " & strMyParm1
.Execute
End If
Разве это не так красиво и чисто? Как отмечалось выше, приведенные выше примеры кода, как правило, являются FAR меньше кода и хлопот, а затем, используя опубликованные примеры oleDB/ADO.
Долгое время пользователи Access, которые развивали свои навыки в ODBC и sql-сервере, вам не нужно ничего делать, поскольку отрасль решила, что вы делаете все это время, это рекомендуемый подход.
В то время как JET-DIRECT не поддерживается в ACE, я не могу придумать ни одного случая, когда этот выбор пропущен, используя примеры pass-but querydef, как указано выше, вместо JET direct.