Присоединение запросов к базе данных
Рассмотрим процесс определения запроса с помощью SQL-операторров и присоединения их к базе данных. Выполните следующие действия.
1. Запустите Visual Data Manadger и откройте базу данных BIBLIO.
2. В окне Database щелкните правой кнопкой мыши на запросе All Titles и из контекстного меню выберите команду Design.Visual Data Manadger отобразит другое окно с определением запроса (рис. 17.18).
Рис. 17.18. Кроме таблиц, база данных содержит запросы — SQL-операторы, входящие в проект базы данных
Примечание
Как видите, при открытии окна Database иконка запроса отличается от иконки таблицы.
Имя запроса появляется в свойстве RecordSource элемента управления Data, соединенного с базой данных BIBLIO. Позже мы используем этот запрос, чтобы модифицировать приложение ManyTbIs. Но сначала рассмотрим инструментальные средства Visual Data Manager для построения SQL-запросов.
Построение SQL-запросов
Если SQL кажется вам сложным для изучения, то знайте: Visual Data Manager позволяет создавать простые SQL-операторы с помощью мыши. Щелкните правой кнопкой мыши в окне Datadase и из контекстного меню выберите New Query (Новый запрос), чтобы открыть окно Query Builder (Конструктор запросов) (рис. 17.19).
Рис. 17.19. Query Builder: построение SQL-операторов с помощью мыши
Используем Visual Data Manager для построения простых SQL-операторов. Выполните следующие действия, чтобы создать запрос, выбирающий названия всех изданий и их издателей.
1. Выберите имена таблиц Publishers и Titles, щелкнув кнопкой мыши на их именах в списке Tables (Таблицы). Поля выбранных таблиц появятся в списке Field to Show (Показывать поля).
2. Щелкните на именах полей, которые необходимо включить в запрос (в RecordSet, который этот запрос возвратит). Щелкните на следующих именах полей Titles Title, Titles [Year Published] и Publishers Name.
Построим наиболее сложную часть SQL-оператора. Щелкните на кнопке Set Table Joins (Установить связи между таблицами) для задания объединения (чтобы определить, как таблицы будут объединены) Visual Data Manager не использует оператор JOIN. Он реализует объединения с помощью ключевого слова WHERE, а это означает, что на этот инструмент нельзя полагаться при создании усовершенствованных запросов.
3. В списке Select Table Pair (Выбрать пары таблиц) щелкните на именах таблиц Titles и Publishers. Поля обеих таблиц появятся в списках под заголовком Select Fields to Join On (Выбрать поля для объединения), как показано на рис. 17.20.
Рис. 17.20. Диалоговое окно Join Tables: позволяет определить внутренние объединения
4. Щелкните на поле PubID в обоих списках. Таблицы Titles и Publishers объединятся по значению поля PubID.
5. Щелкните на кнопке Add Join to Query (Добавить объединение к запросу), чтобы добавить в запрос объединение.
6. Щелкните на кнопке Close, чтобы возвратиться в окно конструктора запросов Query Builder. Запрос определен.
7. Щелкните на кнопке Show, чтобы отобразить SQL-оператор, или на кнопке Run, чтобы выполнить его. После сообщения о том, является ли данный запрос SQLPassThrough-запросом, щелкните на кнопке No. Появится новая форма с элементом управления Data, позволяющим перемещаться по выбранным записям.
8. Для присоединения запроса к базе данных щелкните на кнопке Save. Visual Data Manager запросит имя запроса и присоединит его к базе данных. В следующий раз при подключении элемента управления Data к базе данных в списке доступных элементов RecordSource появится имя запроса.
Можно использовать конструктор запросов Query Builder, чтобы определить критерии выбора, реализуемые с помощью ключевого слова WHERE для группирования и упорядочивания результатов запроса, а также ограничения размера RecordSet (если он слишком большой).
Чтобы добавить критерий выбора, выберите имя поля в списке Field Name, задайте операцию и определите значение в поле Value. Если вы не помните значение определенного поля, то щелкните на кнопке List Possible Values (Список возможных значений) и Visual Data Manager выведет все значения указанного списка.
SQL-операторы, сгенерированные конструктором запросов Query Builder, просты и пригодны для несложных запросов. Например, конструктор запросов Query Builder не создает множественные объединения. Но всегда можно отредактировать SQL-оператор (открывая запрос в режиме разработки) и добавить в него ключевые слова. Если необходимо создать SQL-оператор, а вы еще свободно не владеете SQL-языком, то используйте более совершенный инструмент, например, MS Access.
VB6 в действии: проект SQLTbIs (модификация ManyTbIs)
Приложение ManyTbIs объединяет все таблицы базы данных
BIBLIO для отображения названий книг с именами авторов и издателей. В нем используется метод Seek для объединения таблиц не потому, что это наиболее эффективная реализация, а чтобы продемонстрировать использование индексов в методе Seek. Реализуем подобное приложение, но для определения RecordSet с необходимыми полями будем использовать SQL-операторы. Выполните следующие действия.
1. Откройте приложение ManyTbIs, сохраните его как SQLTbIs (измените имя формы на SQLTbIs) и поместите его в новую папку.
2. Удалите все элементы управления Data формы и разместите на ней новый элемент управления Data. Назовите его TITLES и присвойте его свойству Caption значение
Titles-Authors-Publishers.
3. Соедините этот элемент управления с базой данных BIBLIO, указав в свойстве DatabaseName путь к базе данных.
4. Откройте список свойства RecordSource и выберите All Titles. Это имя SQL-запроса в базе данных, который возвращает необходимый RecordSet (названия изданий, их авторов и издателей).
5. Так как RecordSet создан с помощью SQL-оператора, то он является набором записей типа DynaSet, и для элемента управления Data необходимо установить свойство RecordSetType в 1-DynaSet.
6. Теперь откорректируйте свойства DataSource и DataFields элементов управления, размещенных на форме, чтобы они были связаны с соответствующими полями RecordSet через элемент управления Datal. Для этого необходимо установить их свойство DataSource в значение
Datal, а свойство DataField - в Title, Company Name, Year Published и Author.
7. Последние два поля на основной форме приложения (Descriptions и Comments) не являются частью запроса All Titles, поэтому удалите их из формы. Можно изменить запрос или создать новый (который содержит эти поля), основанный на запросе All Titles.
8. Удалите весь код в приложении: он больше не нужен.
В действительности, SQL-оператор выполняет функции кода приложения, но этот подход компактнее и эффективнее.