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


Связывание приложений Access с SQL Server — База данных SQL Azure (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

При связывании таблицы Access с таблицей SQL Server или SQL Azure ядро СУБД 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 извлекает дополнительные данные по мере необходимости.

Важный

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

Отмена связывания таблиц Access

При отмене связывания таблицы 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.

Обновление связанных таблиц с помощью 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 for Applications (VBA) перед доступом к полю идентификатора.

Recordset.Update  
Recordset.Move 0,  
Recordset.LastModified  

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

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

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).

Резолюция: Отсутствует.

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

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

решение : Можно определить запрос Access, возвращающий только эти строки с поддерживаемыми типами данных.

См. также

Миграция баз данных Access в SQL Server