Visual Basic 6. Руководство разработчика


Присоединение запросов к базе данных


Рассмотрим процесс определения запроса с помощью 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-оператор выполняет функции кода приложения, но этот подход компактнее и эффективнее.


Содержание раздела