
- •Цель работы: изучение методов создание связей и объединений в запросах.
- •Работа в окне конструктора таблиц
- •Изменение размера верхней части окна конструктора запросов
- •Перемещение макетов таблиц
- •Просмотр имен таблиц
- •Ограничения в многотабличных запросах
- •Ограничения, накладываемые на обновление записей
- •Советы по созданию обновляемых полей в запросах
- •Связывание таблиц
- •Удаление связей
- •Типы связей между таблицами
- •Внутренние объединения
- •Изменение свойств связи
- •Создание левого внешнего объединения
Ограничения в многотабличных запросах
При создании запроса на выборку из нескольких таблиц необходимо учитывать ограничения, накладываемые на возможность редактирования полей. В принципе, вы можете изменить данные в полученном после выполнения запроса динамическом наборе данных, и изменения эти будут сохранены в используемых таблицах. Однако если установлен режим поддержки целостности данных и ключевое поле входит в цепочку связей, то изменить его не удастся (если не будет установлен флажок Каскадное обновление связанных полей).
Для того чтобы таблица по данным запроса была обновлена, величина в указанной записи в запросе должна представлять одну запись в используемой таблице. Это значит, что вы не сможете обновить поля в перекрестных или итоговых запросах, поскольку записи в них сгруппированы для отображения групповой информации. Поэтому они не отображают данные из фактически используемой таблицы. Вместо этого вы видите записи данных, которые были отобраны по указанному вами критерию и сохранены в виртуальной (реально не существующей ) таблице, которая является как бы моментальным снимком реальной таблицы.
Ограничения, накладываемые на обновление записей
В Ассезз версии 1.х записи в связи типа один-ко-многим можно было обновить только со стороны многие. В версия программы 2.0 и 7.0 были внесены изменения. В табл.1 перечислены поля, которые поддаются обновлению. Как видно из таблицы, запросы, основанные на связях один-ко-многим, можно обновить в обеих таблицах (в зависимости от способа построения запроса). Однако всякий запрос, который создает снимок, обновить невозможно.
Таблица.1. Правила обновления в запросах
Тип запроса или поля |
Возможность обновления |
Комментарии |
Одна таблица |
Да |
|
Связь один-к-одному |
Да |
|
Связь один-ко-многим |
В большинстве случаев |
Зависит от макета запроса (см. приведенный ниже текст) |
Перекрестный |
Нет |
Создает снимок данных |
Запрос с выполнением итоговых вычислений (5ит, Ауд и т.д.) |
Нет |
Работает со сгруппированными данными и создает снимок |
Свойство Уникальные значения установлено в состояние Да |
Нет |
Показывает уникальные записи только в снимке |
801-запросы |
Нет |
Работает с ООВС-данными |
Вычисляемые поля |
Нет |
Пересчитывает автоматически |
Файлы только для чтения |
Нет |
Работает, если файл открыт в 'режиме "только для чтения" или на устройстве, предназначенном только для считывания данных (например, на компакт-диске) |
Отмена прав доступа |
Нет |
Операции Вставить, Заменить и Удалить не разрешены |
ООВС-таблицы без ключевого поля |
Нет |
Должно существовать ключевое поле (уникальный индекс) |
Таблицы СУБД Рагааох без ключевого поля |
Нет |
Должно существовать ключевое поле (уникальный индекс) |
Заблокирован другим пользователем |
Нет |
Заблокированное поле не может быть обновлено |
Преодоление ограничений
В табл.1 показано, что возможны ситуации, когда запросы и поля в таблицах не поддаются обновлению. Как правило, любой запрос можно обновить, кроме запросов с вычислениями или SQL-запросов. В запросе с множеством таблиц, среди которых есть таблицы со связью один-ко-многим, могут быть поля, которые не удастся обновить (в зависимости от макета запроса).
Уникальный индекс (ключевое поле) и обновление
Если в запросе используются две таблицы со связью один-ко-многим, одна сторона связи должна иметь уникальный индекс в поле (ключевое поле), используемом для связи. Если это не так, то поля с одной стороны запроса не будут обновляться.
Замена данных в запросе со связью один-ко-многим
Как правило, в запросе с типом связи один-ко-многим все поля в таблице поддаются обновлению со стороны многие. В таблице со стороны один можно обновить все поля, за исключением ключевого поля (поля связи). Обычно этого достаточно для большинства прикладных баз данных. Вряд ли вам когда-нибудь понадобится изменять ключевое поле в таблице со стороны один, поскольку оно является связующим звеном для записей в объединенных таблицах.
Однако может случиться, что вам нужно будет изменить содержимое поля-связи в обеих таблицах (создать новое ключевое поле в одной таблице и изменить поле связи во всех связанных записях в таблице со стороны многие). Новая версия Ассеss позволяет сделать это посредством определения связи между таблицами и использования режима целостности данных. Если при определении связи с помощью конструктора связей задать режим целостности данных, станут активными две опции. Для разрешения изменения (обновления) ключевого поля установите флажок Каскадное обновление связанных полей, как показано на рис.7. В этом случае Ассеss автоматически обновит значения этого поля во всех других связанных таблицах.
Рис.7. Диалоговое окно Связи с выбранным режимом обеспечения целостности данных