Программа SQL Builder
Программа SQL Builder предназначена для упрощения создания SQL-запросов. С помощью этой программы разработчик может достаточно удобно конструировать запросы, сохраняя их в виде текстового файла с расширением SQL.
Программа SQL Builder (рис.27) вызывается выбором из контекстного меню компонента Query команды SQL Builder.Отметим, что во время работы программы SQL Builder нельзя перейти в другие окна Delphi, такой переход возможен только по завершению работы с ней.
В верхней части окна программы SQL Builder размещаются таблицы, выбранные для построения запроса, а в нижней части — многостраничный блокнот.
Рис. 27. Окно программы SQL Builder
Для выполнения запроса нужно вызвать команду Query/Run Queryменю программы SQL Builder или нажать кнопку панели инструментов. Перед выполнением запроса происходит проверка его правильности. На рис.28 показано окно, в котором выводятся результаты выполнения запроса.
Рис. 28. Окно с результатами выполнения запроса
Для получения текста, соответствующего визуальному запросу, нужно выполнить команду Query/Show SQLили нажать на панели инструментов кнопку с буквами SQL. При отсутствии ошибок в конструкции запроса автоматически открывается окно SQL Query Text Entry(рис.29), в котором содержится текст запроса на языке SQL. В этом окне можно выполнить такие действия, как сохранение, загрузка или выполнение запроса.
При наличии ошибок названное окно не появляется, а выдается сообщение об ошибке.
Сохранение запроса в виде текстового файла с расширением SQL выполняется командой File/Export to file.
Рис. 29. Окно SQL Query Text Entry
Замечание
Если сохраненный запрос содержит ошибки, то при попытке его открыть выдается соответствующее сообщение, и открытия не происходит. Поэтому перед сохранением запроса в файле SQL следует проверять его правильность, например, путем его выполнения.
Открытие запроса осуществляется командой File/Import from file.
Сохранить и открыть запрос можно также с помощью кнопок панели инструментов, на которых изображены дискета и открытая папка, соответственно. Отметим, что подсказки, выводимые при нахождении указателя мыши над этими кнопками, не совпадают с названиями соответствующих команд меню. Для кнопки сохранения — это Save the current query(Сохранить текущий запрос), а для кнопки открытия — Open an existing SQL Query(Открыть существующий SQL-запрос).
Чтобы добавить в окно программы новую таблицу, нужно в поле Databaseуказать расположение базы данных, выбрав псевдоним из раскрывающегося списка или введя вручную путь к каталогу с файлами БД. После этого в списке Tableвыбирается нужная таблица, которая автоматически добавляется в верхнюю часть окна. Добавляемые таблицы могут располагаться и в разных каталогах.
Таблица представляется изображением, похожим на комбинированный список. В верхней части этого списка находятся псевдоним (Alias) таблицы, флажок и стрелка. Стрелка позволяет свернуть или развернуть список, а флажок служит для управления включением всех полей таблицы в результат запроса или выключением из него.
Замечание
Псевдоним таблицы представляет собой имя, используемое в тексте SQL-запроса для замены имени таблицы, и не имеет ничего общего с псевдонимом, указывающим расположение БД и конкретной таблицы.
Для смены псевдонима таблицы нужно вызвать команду Edit Table Aliasконтекстного меню этой таблицы. При этом в названии псевдонима отображается текстовый курсор, что показывает готовность его к изменению. После нажатия клавиши <Enter> новое название псевдонима вступает в действие.
Остальную масть списка занимают строки с информацией о полях таблицы — имя поля, его тип и размер. Размер указывается только для тех полей, для которых он не устанавливается автоматически на основании типа поля, например, для поля строкового типа. Слева от названия поля находится флажок, управляющий включением этого поля в результат запроса. Если флажок установлен (стоит галочка), то поле включается в результат запроса.
Удаление таблицы из окна программы выполняется командой Remove Tableконтекстного меню этой таблицы. Можно также выделить таблицу, щелкнув на ее изображении, при этом вокруг ее псевдонима отобразится пунктирный прямоугольник. После выделения таблица удаляется нажатием клавишы <Delete>.
Программа SQL Builder позволяет достаточно просто и удобно выполнить связывание (соединение) таблиц. Для этого нужно выбрать мышью поле в одной таблице и перетащить его в используемое для связи поле другой таблицы. После отпускания кнопки мыши между таблицами устанавливается связь, что отображается линией, соединяющей эти таблицы (рис.30). В обеих таблицах поля, используемые для связи, отображаются в списке полей первыми (верхними) и выделяются жирным шрифтом. В отличие от ряда других программ, например, Microsoft Access, эта линия соединяет названия таблиц, а не используемые для связи поля обеих таблиц.
Напомним, что в главной таблице поле для связи должно быть ключевым, а в подчиненной таблице - индексным. Поля связи должны иметь одинаковые или совместимые типы, в противном случае выдается сообщение об ошибке несоответствия типов (рис. 31).
Рис. 30. Связывание таблиц
Рис. 31. Сообщение о несоответствии типов полей
Для удаления связи нужно щелкнуть правой кнопкой мыши на линии, обозначающей связь между таблицами, вызвав контекстное меню и выполнить его единственную команду Delete Join.После подтверждения этой операции связь удаляется.
В нижней части окна программы SQL Builder находится блокнот, который автоматически появляется при добавлении к окну программы первой таблицы. С помощью блокнота можно включать в запрос условия отбора записей или указывать направления их сортировки.
Страница Criteriaпозволяет задать условия отбора записей. Каждое условие вводится в отдельной строке и состоит из двух имен полей или значений, разделенных операцией сравнения. Имена полей выбираются из списка или перетаскиваются мышью из соответствующей таблицы в верхней части окна. Операция сравнения выбирается из списка. Если условие введено с ошибкой, то выдается соответствующее сообщение, а само условие в запрос не включается и отображается красным цветом.
Удаление строки с условием выполняется командой Delete Rowконтекстного меню удаляемой строки. Отметим, что аналогично можно удалить строку и из списка других страниц блокнота.
Список of the following criteria are met(... из перечисленных условий выполнены) позволяет задать логические операции, которые связывают строки с отдельными условиями. В левой части строк с условиями отображаются названия логических операций.
По умолчанию список содержит значение all (все), что соответствует операции логического умножения (рис. 27) и означает, что все из перечисленных условий выполнены. При этом в левой части строк с условиями, кроме первой, отображается операция and. Кроме значения all, в списке можно также выбрать:
□ any — операция логического сложения (or);
□ none — инверсия значения any;
□ not all — инверсия значения all.
Страница Selectionпозволяет изменить названия заголовков столбцов, используемых для отображения значений полей в результирующем наборе, а также включить в запрос статистические функции по полям.
В правой части списка указываются поля, включенные в результат запроса — им соответствуют установленные флажки в изображениях таблиц. В левой части списка для каждого поля помещается название соответствующего столбца, которое по умолчанию совпадает с именем поля (без указания имени таблицы).
В запросе, показанном на рис.32, английские названия столбцов трех первых полей заменены на русские.
Результирующий набор данных (с русскими названиями столбцов) можно видеть на рис.33.
Добавление к запросу статистической функции выполняется с помощью команды Summary(Итог) контекстного меню страницы. В результате появляются списки, из которых выбираются функция (например, sum)и поле.
Рис. 32. Задание названий для столбцов результирующего набора данных
Рис. 33.Вид результирующего набора данных с измененными названиями столбцов
Переключатель Remove Dublicates (Исключить повторы) позволяет убрать из результирующего набора одинаковые записи. По умолчанию он выключен, и в результат попадают все записи (в том числе и совпадающие), которые отвечают заданным условиям отбора.
Страница Grouping позволяет сгруппировать записи по полям, при этом список Output Fields содержит все поля, которые можно использовать для группирования записей. В список Grouped On отбираются имена полей, по которым выполняется группирование (рис.34). Перемещение полей первого списка во второй и удаление полей из второго списка выполняется с помощью кнопок Add и Remove, которые становятся активными при выборе поля (полей) в соответствующем списке. Перемещение поля между списками можно также выполнить двойным щелчком на его имени.
Рис. 34. Задание полей для группирования записей
Доступными являются поля, флажок которых в изображении таблицы отмечен. Имя поля состоит из псевдонима (имени) таблицы и названия столбца для этого поля, заданного на странице Selection.
Страница Group Criteriaсодержит условия, используемые для группирования записей. Условия группирования вводятся аналогично условиям отбора записей, задаваемым на странице Criteria.
Страница Sortingопределяет порядок сортировки записей. Список Sorted Byсодержит имена полей, по которым выполняется сортировка (рис.35). Порядок следования полей определяет последовательность сортировки: сначала записи упорядочиваются по значениям поля, указанного в списке первым (верхним), затем записи, имеющие одинаковое значение первого поля, упорядочиваются по второму полю и т. д. Для изменения порядка расположения полей, по которым выполняется сортировка, служат кнопки с изображением черных треугольников, расположенные над именами полей. Кнопка с треугольником, направленным вниз, перемещает выделенное поле (поля) на одну строку вниз, кнопка с треугольником, направленным вверх, — на одну строку вверх.
Рис. 35.Задание полей для сортировки записей
По умолчанию сортировка выполняется в порядке возрастания значения поля, на что указывает признак Ascending справа от имени поля. Для задания обратного порядка сортировки по полю нужно его выделить и нажать кнопку Z..A, при этом вместо Ascending устанавливается признак Descending. Нажатие кнопки A..Z возвращает прежний порядок сортировки.
Список Output Fieldsсодержит поля, которые можно использовать для сортировки записей. Обозначение полей и способы их перемещения между списками не отличаются от обозначения полей и способов их перемещения для страницы Grouping.
Страница Joinsпозволяет устанавливать связи (соединения) между таблицами (рис. 36).
Рис. 36. Задание связи между таблицами
Действия, выполняемые на этой странице, частично дублируют описанные ранее действия по связыванию таблиц и разрыве связи между ними. Кроме того, здесь можно задать дополнительные условия для связи и выбрать операцию для сравнения значений полей связываемых таблиц, например, >, < или = (по умолчанию).