Связывание приложений 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.
Связывание таблиц
В обозревателе метаданных Access выберите таблицы, которые требуется связать.
Щелкните правой кнопкой мыши таблицы и выберите ссылку.
Помощник по миграции 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 и ее данные.
Чтобы разъединить таблицы
В обозревателе метаданных Access выберите таблицы, которые требуется разорвать связь.
Щелкните правой кнопкой мыши таблицы, а затем выберите Разорвать связь.
Связывание таблиц с другим сервером
Если вы связали таблицы Access с одним экземпляром SQL Server, а затем хотите изменить ссылки на другой экземпляр, необходимо повторно связать таблицы.
Связывание таблиц с другим сервером
В обозревателе метаданных Access выберите таблицы, которые требуется разорвать связь.
Щелкните правой кнопкой мыши таблицы и выберите Отменить связь.
Нажмите кнопку повторного подключения к SQL Server.
Подключитесь к экземпляру SQL Server или SQL Azure, к которому требуется связать таблицы Access.
В обозревателе метаданных Access выберите таблицы, которые требуется связать.
Щелкните правой кнопкой мыши таблицы и выберите ссылку.
Обновление связанных таблиц
Если определения таблиц SQL Server или SQL Azure изменяются, можно отменить связь, а затем повторно связать таблицы в SSMA с помощью процедур, описанных ранее в этом разделе. Вы также можете обновить таблицы с помощью Access.
Обновление связанных таблиц с помощью Access
Откройте базу данных Access.
В списке объектов щелкните таблицы.
Щелкните правой кнопкой мыши связанную таблицу и выберите Диспетчер связанных таблиц.
Установите флажок рядом с каждой связанной таблицей, которую вы хотите обновить, и нажмите кнопку ОК.
Возможные проблемы после миграции
В следующих разделах перечислены проблемы, которые могут возникнуть в существующих приложениях 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, возвращающий только эти строки с поддерживаемыми типами данных.