Поделиться через


Связывание приложений Access с SQL Server и Azure SQL (AccessToSQL)

Если вы хотите использовать существующие приложения Access с SQL Server, вы можете связать исходные таблицы Access с перенесенными таблицами SQL Server или Sql Azure. Связывание базы данных Access изменяет базу данных Access таким образом, чтобы ваши запросы, формы, отчеты и страницы доступа к данным использовали данные в базе данных SQL Server или Базе данных SQL Azure вместо данных в базе данных Access.

Заметка

Таблицы Access остаются в Access, но не обновляются вместе с обновлениями SQL Server или SQL Azure. После связывания таблиц и проверки функциональности может потребоваться удалить таблицы Access.

При связывании таблицы Access с таблицей SQL Server или Azure SQL ядро СУБД Jet хранит сведения о подключении и метаданные таблицы, но данные хранятся в SQL Server или SQL Azure. Это связывание позволяет приложениям Access работать с таблицами Access, даже если фактические таблицы и данные находятся в SQL Server или SQL Azure.

Заметка

При использовании проверки подлинности SQL Server пароль хранится в виде ясного текста в связанных таблицах Access. Вместо этого используйте проверку подлинности Windows.

  1. В обозревателе метаданных Access выберите таблицы, которые требуется связать.

  2. Щелкните правой кнопкой мыши таблицы и выберите ссылку.

Помощник по миграции SQL Server (SSMA) для Access создает резервную копию исходной таблицы Access и создает связанную таблицу.

После связывания таблиц таблицы в SSMA отображаются с небольшим значком ссылки. В Access таблицы отображаются со значком "связанный", который выглядит как глобус со стрелкой, указывающей на него.

При открытии таблицы в Access данные извлекаются с помощью курсора набора ключей. В результате для больших таблиц данные не извлекаются одновременно. Однако при просмотре таблицы Access извлекает больше данных по мере необходимости.

Важный

Чтобы связать таблицы Access с базой данных Azure, вам потребуется SQL Server Native Client (SNAC) версии 10.5 или более поздней. Получите последнюю версию SNAC из пакета дополнительных компонентов Microsoft SQL Server 2008 R2. SNAC был удален в SQL Server 2022 (16.x).

При отмене связывания таблицы Access из таблицы SQL Server или SQL Azure SSMA восстанавливает исходную таблицу Access и ее данные.

  1. В обозревателе метаданных Access выберите таблицы, которые требуется разорвать связь.

  2. Щелкните правой кнопкой мыши таблицы, а затем выберите Разорвать связь.

Если вы связываете таблицы Access с одним экземпляром SQL Server, а затем хотите изменить ссылки на другой экземпляр, необходимо повторно связать таблицы.

  1. В обозревателе метаданных Access выберите таблицы, которые требуется разорвать связь.

  2. Щелкните правой кнопкой мыши таблицы и выберите Отменить связь.

  3. Нажмите кнопку "Повторно подключиться к SQL Server ".

  4. Подключитесь к экземпляру SQL Server или SQL Azure, к которому требуется связать таблицы Access.

  5. В обозревателе метаданных Access выберите таблицы, которые требуется связать.

  6. Щелкните правой кнопкой мыши таблицы и выберите ссылку.

Обновление связанных таблиц

При изменении определений таблиц SQL Server или SQL Azure можно отменить связь, а затем повторно связать таблицы в SSMA с помощью процедур, описанных ранее в этой статье. Вы также можете обновить таблицы с помощью Access.

  1. Откройте базу данных Access.

  2. В списке "Объекты " выберите "Таблицы".

  3. Щелкните правой кнопкой мыши связанную таблицу и выберите Диспетчер связанных таблиц.

  4. Установите флажок рядом с каждой связанной таблицей, которую вы хотите обновить, и нажмите кнопку "ОК".

Возможные проблемы после миграции

В следующих разделах перечислены проблемы, которые могут возникнуть в существующих приложениях Access после переноса баз данных из Access на SQL Server или SQL Azure, а затем связать таблицы. В разделах также описываются причины и решения этих проблем.

Низкая производительность со связанными таблицами

Причина: некоторые запросы могут быть медленными после изменения размера по следующим причинам:

  • Приложение зависит от функций, которые не существуют в SQL Server или SQL Azure. Jet загружает таблицы локально для выполнения запроса SELECT.

  • Jet отправляет запросы, которые обновляют или удаляют многие строки в качестве параметризованного запроса для каждой строки.

Разрешение: Преобразуйте медленные запросы в сквозные запросы, хранимые процедуры или представления. При преобразовании в сквозные запросы возникают следующие проблемы:

  • Не удается изменить сквозные запросы. Необходимо изменить результат запроса или добавить новые записи альтернативным способом. Например, вы можете иметь явные кнопки "Изменить " или "Добавить " в форме, привязанной к запросу.

  • Сквозные запросы не поддерживают входные данные пользователей, но некоторые запросы требуют ввода пользователем. Вы можете использовать Visual Basic для приложений (VBA) для запроса параметров или получения пользовательских данных с помощью формы. В обоих случаях код VBA отправляет запрос с вводом пользователя на сервер.

Столбцы автоинкремента не обновляются, пока запись не обновится.

Причина. После вызова RecordSet.AddNew в Jet столбец автоматического увеличения доступен до обновления записи. Это условие не верно в SQL Server или SQL Azure. Новое значение столбца идентичности становится доступным только после сохранения новой записи.

Решение. Выполните следующий код Visual Basic для приложений (VBA) перед доступом к полю удостоверения:

Recordset.Update
Recordset.Move 0,
Recordset.LastModified

Новые записи недоступны

Причина. При добавлении записи в таблицу SQL Server или Azure SQL с помощью VBA, если уникальное поле индекса таблицы имеет значение по умолчанию и не присваиваете этому полю значение, новая запись не отображается, пока не откроется таблица в SQL Server или Azure SQL. При попытке получить значение из новой записи вы получите следующее сообщение об ошибке:

Run-time error '3167' Record is deleted.

Решение: При открытии таблицы SQL Server или SQL Azure с помощью кода VBA включите этот параметр dbSeeChanges, как показано в следующем примере:

Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)

После миграции некоторые запросы не позволяют пользователю добавлять новую запись.

Причина. Если запрос не включает все столбцы, включенные в уникальный индекс, нельзя добавлять новые значения с помощью запроса.

Разрешение. Убедитесь, что все столбцы, включенные по крайней мере в один уникальный индекс, являются частью запроса.

Невозможно изменить схему связанной таблицы с помощью Access

Причина. После переноса данных и связывания таблиц невозможно изменить схему таблицы в Access.

Решение. Измените схему таблицы с помощью SQL Server Management Studio, а затем обновите ссылку в Access.

Причина. После переноса данных гиперссылки в столбцах теряют свою функциональность и становятся простыми столбцами nvarchar(max).

Разрешение: нет.

Access не поддерживает некоторые типы данных SQL Server

Причина. Если вы обновляете таблицы SQL Server или SQL Azure, чтобы включить типы данных , которые не поддерживают Access, вы не можете открыть таблицу в Access.

Разрешение. Определение запроса Access, возвращающего только строки с поддерживаемыми типами данных.