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

11. Пример использования внутреннего объединения.

Результат работы команды приведен на рис. 12

Рис 12. Пример сложного внутреннего объединения

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

В списке полей устанавливаются следующие поля:

Titles.Title - название книги;

Titles.ISBN - ISBN код книги;

Authors. Author - автор книги;

Titles.[Year Published] - год публикации книги;

Publishers.[Company Name] - издатель книги.

БД BIBLIO содержит четыре таблицы, а наш запрос требует данных из трех таблиц. Фактически никакие данные из таблицы Title Author в результатах запроса не отображаются, но эта таблица связывает названия и имена авторов (через ISBN код книги), поэтому ее необходимо использовать в SQL-запросе.

Поля не выбираются из каждой конкретной таблицы непосредственно. Их получают из ряда внутренних объединений. Первое внутреннее объединение такое:

[Title Author] INNER JOIN Titles ON [Title Author].ISBN = Titles.ISBN

Это выражение извлекает (и соединяет) каждое название издания с идентификатором его автора, если ISBN-код в обеих таблицах совпадает. В сущности будет получен идентификатор автора для каждого издания. Назовем это выражение (которое является объектом RecordSet) Title-AuthorIDs. Данный RecordSet помещен в круглые скобки и соединен с другим RecordSet.

(Title-AuthorIDs) INNER JOIN Authors ON [Title Author].Au_ID =Authors.Au_ID

Этот RecordSet соединяет идентификаторы авторов предыдущего RecordSet с фактическими именами авторов. Мы создали RecordSet с именами авторов и названиями изданий. Назовем его Titles-Author. Последняя операция объединения соединяет RecordSet, который содержит имена авторов и изданий с таблицей Publishers:

(Titles-Author) INNER JOIN Publishers ON Titles.PubID = Publishers.PubID

На этот раз идентификаторы издателей должны совпадать. Результирующий RecordSet содержит названия изданий, авторов и издателей и является источником данных. Последнее ключевое слово в этой SQL-команде, ORDER BY, задает порядок отображения заказов.

6.2. Использование sql-операторов

Свойство RecordSet элемента управления Data необязательно должно быть именем таблицы. Это свойство может быть представлено SQL-запросом. В качестве примера рассмотрим ранее приведенное выражение Data1, которое отображает несколько полей из таблицы Titles БД BIBLIO. Предположим, необходимо, чтобы приложение Datal отобразило наименование книг, изданных только в 1994 году. Для этого необходимо выполнить следующие действия.

1. Откройте приложение Datal и выберите элемент управления Data.

2. В окне Properties найдите свойство RecordSource и введите следующий SQL оператор (рис. 13):

SELECT * FROM Titles WHERE [Year Published] = 1994

3. Запустите приложение и используйте кнопки элемента управления Data для перемещения наименования книг, изданных в 1994 году.

Так как SQL-операторы широко используются при работе с БД, то допускается их непосредственное включение в БД. Если открыть список свойства RecordSource элемента управления Data, соединенного с БД BIBLIO, то видно, что он содержит не только имена таблиц. Он содержит имена SQL-операторов, сохраненных непосредственно в БД. Например, элемент All Titles не является именем таблицы. Это - имя запроса, который возвращает необходимый RecordSet (название изданий, их авторов и издателей)

Рис. 13. Присвоение свойству RecordSource

SQL-оператор для получения RecordSet

В качестве примера использования запросов модифицируем ранее рассмотренное приложение ManyTbls. Это приложение объединяет все таблицы БД BIBL1O для отображения названий книг с именами авторов и издателей. Как уже отмечалось, в этом приложении для объединения таблиц использование метода Seek не является эффективным. Главным было демонстрация использования индексов. Реализуем это приложение с использованием SQL-операторов в следующей последовательности:

  1. Удалите все элементы управления Data формы и разместите в ней новый элемент управления Data (с именем Data1).

  2. Соедините этот элемент управления с БД BIBLIO, указав в свойстве DatabaseName путь к БД.

  3. Откройте список свойства RecordSource и выберите All Titles. Это имя SQL-запроса БД, который возвращает необходимый RecordSet (названия изданий, их авторов и издателей).

  4. Так как RecordSet создан с помощью SQL-оператора, то он является набором записей типа DynaSet, и для элемента управления Data необходимо установить свойство RecordSetType в 1-DynaSet.

  5. Теперь откорректируйте свойства DataSource и DataFields элементов управления, размещенных в форме, чтобы они были связаны с соответствующими полями RecordSet через элемент управления Data1. Для этого необходимо установить их свойство DataSource в значение Datal, а свойство DataField - в Title, Company Name, Year Published и Author.

  6. Последние два поля в основной форме приложения (Descriptions и Comments) не являются частью запроса All Titles, поэтому удалите их из формы. Можно изменить запрос или создать новый (который содержит эти поля), основанный на запросе All Titles.

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