CurrentProject.Connection
- это предварительно инициализированное и всегда существующее соединение с текущей базой данных Access.
Соединения, использующие строки подключения ODBC, строки подключения OLEDB или DSN ODBC, однако, могут подключаться напрямую к внешним источникам данных, сокращая накладные расходы и используя диалект SQL, параметры и особенности внешней системы.
CurrentProject.Connection
может использовать связанные таблицы, но если это так, он фактически использует соединение DAO, соединяющее Access с сервером SQL (связанные таблицы всегда используют DAO, поскольку Access использует DAO внутри), а затем соединение ADO с Доступ к базе данных для получения данных из Access, что приводит к дополнительным расходам.
Это означает, что соединения, использующие драйвер ODBC-сервера SQL или поставщика OLEDB, могут быть значительно быстрее в определенных случаях, чем соединения, использующие CurrentProject.Connection
при подключении к внешним источникам. Кроме того, прямые соединения с использованием драйвера ODBC или поставщика OLEDB могут предоставлять дополнительные функции, например возвращать информационные сообщения с сервера SQL.
Подробнее о том, что происходит:
Если вы используете CurrentProject.Connection
для открытия связанной таблицы, происходит следующее:
- Вы используете уже открытое соединение с базой данных Access
- Вы отправляете команду SQL в базу данных Access, используя ее диалект SQL (JET / ACE SQL, используя режим синтаксиса, совместимый с SQL-сервером)
- Access идентифицирует таблицу, к которой он должен обратиться, определяет, что она связана, и переводит оператор SQL на соответствующий язык
- Access либо открывает новое (внутреннее / DAO) соединение с сервером SQL, либо использует существующее открытое соединение, если оно существует
- Access извлекает данные с сервера SQL в базу данных Access, используя выбранное соединение и переведенный оператор
- Затем Access отправляет данные в соединение ADODB.
Однако, если вы используете прямое ADODB-соединение, процесс будет намного проще:
- Вы открываете новое соединение ADODB с сервером SQL
- Вы отправляете команду SQL на сервер SQL
- Сервер SQL отправляет данные обратно вам через соединение ADODB
Механизм базы данных Access на 100% не знает, что вы запрашиваете что-либо здесь, поскольку он не участвует ни в одном из шагов.
Дополнительные примечания:
Если вы используете CurrentProject.Connection
и курсор на стороне сервера, курсор управляется модулем базы данных Access, а не сервером SQL, даже если вы запрашиваете сервер SQL.
Если вы используете CurrentProject.Connection
, вы должны использовать Access (JET / ACE) SQL с использованием синтаксиса, совместимого с SQL-сервером. Это означает, что в операторах LIKE вам нужно использовать %
в качестве подстановочного знака, и у вас есть набор функций, отличный от обычного синтаксиса, но вы все равно должны использовать окто-типы при разделении вызовов, а оператор SQL по-прежнему обрабатывается Access, не SQL-сервер.
Хотя в общем случае прямое подключение к серверу SQL происходит быстрее, чем подключение через Access с использованием CurrentProject.Connection
, могут применяться исключения (например, поскольку Access уже имеет открытое соединение, и вы выполняете только небольшое утверждение, поэтому относительные накладные расходы на установление нового соединения велики)