double arrow

Создание связей для запросов


Редактирование полей справочников

Иногда возникает необходимость изменить поля связи в обеих таблицах. При этом создается новое значение первичного ключа (со стороны «один»), а со стороны «многие» происходит каскадное обновление связанных полей, для чего для данной связи должна быть включена «Целостность данных» и «Каскадное обновление». При отборе полей для запроса возникает вопрос, какое поле брать из связанных.

Практические правила по созданию запросов, обновляющих содержимое полей.

· Предпочтительнее включать в запрос поле связи из таблицы со стороны «многие», а не со стороны «один».

· Для обеспечения добавления записей в обе таблицы со связью «один ко многим» в запрос следует включить поле связи со стороны многие.

· Если необходимо запретить обновление любого поля, задайте для свойства формы «Разрешить изменения»- НЕТ.

· Если нужно запретить изменение для некоторых полей в форме нужно задать ДА для свойства «Блокировка» элемента управления этих полей.

· Изменив в запросе записи, находящиеся в таблице со стороны «один» нельзя вносить изменения в таблице со стороны «многие» до тех пор, пока внесенные изменения не будут сохранены.




Если в двух таблицах имеется общее поле с одинаковым именем и типом и в одной из них оно является первичным ключом, то таблицы связываются автоматически.

Но бывают ситуации, когда для запроса нужна связь кроме автоматической. Например, если поля имеют разные имена. При этом она устанавливается с помощью перетаскивания поля мышью в окне конструктора запроса. Такая связь действительна только для данного запроса и не является связью в схеме БД.

Получается, что создавать можно любые связи, но если поля не содержат ничего общего, то результирующая таблица будет пустой и связь не будет иметь смысла.

Таким образом, для просмотра данных с помощью запроса создается объединение таблиц путем установления связей по общим полям (joining).

Существует несколько типов объединений:

1. Внутреннее объединение (равное). Это объединение создается по умолчанию и в результате - все записи с равными полями.

Если существуют записи без пары на другом конце связи. Например, в Клиенты-Заказы - клиент без заказов, или что еще реже заказ без клиента, то такие записи можно также найти, если при создании «Нового запроса» включить опцию «Записи без подчиненных».

Смысл рассмотрения записи без пары существует. Например, выделить клиентов, не сделавших заказы. При этом возникает необходимость видеть всех клиентов. чтобы всегда видеть всех клиентов- нужно изменить свойство объединения. Для изменения нужно дважды щелкнуть на линии связи и появится окно «Параметры объединения».



Там 3 типа:

1. объединение только тех записей, в которых связанные поля обеих таблиц совпадают- ВНУТРЕННЕЕ.

2. Объединение всех записей из «Имя таблицы («один»)» и только тех записей из «Имя таблицы «многие»», в которых связанные поля совпадают.

3. Объединение всех записей из «Имя таблицы («многие»)» и только тех записей из «Имя таблицы «один»», в которых связанные поля совпадают.

Пункты 2 и 3 – называются внешними объединениями - соответственно левым и правым.

Пустые значения различаются как NULL- неизвестно и “”- пустая строка- говорит о том, что «отсутствует».

Объединение в запросе двух копий одной таблицы (самообъединение).

Рассмотрим пример: допустим, мы хотим создать запрос отображающий имя начальника (он тоже сотрудник) вместо кода.

В этом случае в конструкторе запроса таблица «Сотрудники» добавляется дважды.

При копии идет нумерация. Возможно более осмысленное название путем изменения свойства «Псевдоним» Alias (это никак не влияет на базовую таблицу).Теперь для построения запроса «Подчиненные» можно из «Сотрудники» взять имя, фамилию, должность, а из «Сотрудники_1» взять фамилию (и имя) начальника. Отображение можно сделать более понятным, если в свойстве «Подпись» вместо «Фамилия» задать «Начальник»







Сейчас читают про: