Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ACCESS_L5.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
295.94 Кб
Скачать

Ограничения в многотабличных запросах

При создании запроса на выборку из нескольких таблиц необходимо учитывать ограничения, накладываемые на воз­можность редактирования полей. В принципе, вы можете изменить данные в полученном после выполнения запроса ди­намическом наборе данных, и изменения эти будут сохранены в используемых таблицах. Однако если установлен режим поддержки целостности данных и ключевое поле входит в цепочку связей, то изменить его не удастся (если не будет уста­новлен флажок Каскадное обновление связанных полей).

Для того чтобы таблица по данным запроса была обновлена, величина в указанной записи в запросе должна представ­лять одну запись в используемой таблице. Это значит, что вы не сможете обновить поля в перекрестных или итоговых за­просах, поскольку записи в них сгруппированы для отображения групповой информации. Поэтому они не отображают данные из фактически используемой таблицы. Вместо этого вы видите записи данных, которые были отобраны по указан­ному вами критерию и сохранены в виртуальной (реально не существующей ) таблице, которая является как бы момен­тальным снимком реальной таблицы.

Ограничения, накладываемые на обновление записей

В Ассезз версии 1.х записи в связи типа один-ко-многим можно было обновить только со стороны многие. В версия программы 2.0 и 7.0 были внесены изменения. В табл.1 перечислены поля, которые поддаются обновлению. Как видно из таблицы, запросы, основанные на связях один-ко-многим, можно обновить в обеих таблицах (в зависимости от способа построения запроса). Однако всякий запрос, который создает снимок, обновить невозможно.

Таблица.1. Правила обновления в запросах

Тип запроса или поля

Возможность обновления

Комментарии

Одна таблица

Да

Связь один-к-одному

Да

Связь один-ко-многим

В большинстве случаев

Зависит от макета запроса (см. приведенный ниже текст)

Перекрестный

Нет

Создает снимок данных

Запрос с выполнением итоговых вычислений (5ит, Ауд и т.д.)

Нет

Работает со сгруппированными данными и создает снимок

Свойство Уникальные значения установлено в состояние Да

Нет

Показывает уникальные записи только в снимке

801-запросы

Нет

Работает с ООВС-данными

Вычисляемые поля

Нет

Пересчитывает автоматически

Файлы только для чтения

Нет

Работает, если файл открыт в 'режиме "только для чтения" или на устройстве, предназначен­ном только для считывания данных (например, на компакт-диске)

Отмена прав доступа

Нет

Операции Вставить, Заменить и Удалить не разрешены

ООВС-таблицы без ключевого поля

Нет

Должно существовать ключевое поле (уникальный индекс)

Таблицы СУБД Рагааох без ключе­вого поля

Нет

Должно существовать ключевое поле (уникальный индекс)

Заблокирован другим пользовате­лем

Нет

Заблокированное поле не может быть обнов­лено

Преодоление ограничений

В табл.1 показано, что возможны ситуации, когда запросы и поля в таблицах не поддаются обновлению. Как пра­вило, любой запрос можно обновить, кроме запросов с вычислениями или SQL-запросов. В запросе с множеством таблиц, среди которых есть таблицы со связью один-ко-многим, могут быть поля, которые не удастся обновить (в зависимости от макета запроса).

Уникальный индекс (ключевое поле) и обновление

Если в запросе используются две таблицы со связью один-ко-многим, одна сторона связи должна иметь уникальный индекс в поле (ключевое поле), используемом для связи. Если это не так, то поля с одной стороны запроса не будут об­новляться.

Замена данных в запросе со связью один-ко-многим

Как правило, в запросе с типом связи один-ко-многим все поля в таблице поддаются обновлению со стороны многие. В таблице со стороны один можно обновить все поля, за исключением ключевого поля (поля связи). Обычно этого доста­точно для большинства прикладных баз данных. Вряд ли вам когда-нибудь понадобится изменять ключевое поле в табли­це со стороны один, поскольку оно является связующим звеном для записей в объединенных таблицах.

Однако может случиться, что вам нужно будет изменить содержимое поля-связи в обеих таблицах (создать новое ключевое поле в одной таблице и изменить поле связи во всех связанных записях в таблице со стороны многие). Новая версия Ассеss позволяет сделать это посредством определения связи между таблицами и использования режима целост­ности данных. Если при определении связи с помощью конструктора связей задать режим целостности данных, станут ак­тивными две опции. Для разрешения изменения (обновления) ключевого поля установите флажок Каскадное обнов­ление связанных полей, как показано на рис.7. В этом случае Ассеss автоматически обновит значения этого поля во всех других связанных таблицах.

Рис.7. Диалоговое окно Связи с выбранным режимом обеспечения целостности данных

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]