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


Связывание приложений 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 для приложений (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