Russian Belarusian English German Japanese Ukrainian

Откройте новое приложение C++Builder, перенесите на форму компонент Query со страницы библиотеки DataAccess и установите его свойство DatabaseName равным dbP - базе данных Paradox. В некоторых случаях полезно изменить этот псевдоним на ib - аналогичную базу данных InterBase. Поместите на форму компонент DataSource и в его свойстве DataSet задайте Query1. Поместите также на форму компонент DBGrid и в его свойстве DataSource задайте DataSource1.

Теперь тестовое приложение для экспериментов с языком SQL готово. Операторы SQL можно писать в свойстве SQL компонента Query1, а чтобы увидеть результаты выполнения написанного оператора, надо будет устанавливать значение свойства Active компонента Query1 в true. Это надо будет делать после записи каждого нового оператора.

Одна из форм этого оператора имеет синтаксис:

SELECT <список имен полей> FROM <таблица> WHERE «условие отбора> ORDER BY <список имен полей>;

Элементы оператора WHERE и ORDER BY не являются обязательными. Элемент WHERE определяет условие отбора записей: отбираются только те, в которых условие выполняется. Элемент ORDER BY определяет упорядочивание возвращаемых записей.

<таблица> - это не компонент Table, а именно та таблица базы данных, из которой осуществляется отбор, например, Pers.

Например, оператор:

SELECT Fam, Nam, Par, Year_b FROM Pers

указывает, что следует вернуть поля Fam, Nam, Par и Year_b из таблицы Pers. Запишите его в свойстве SQL компонента Query1, установите значение свойства Active компонента Query1 в true и посмотрите результаты.

Если указать вместо списка полей символ "*", то будет означать, что требуется вернуть все поля. Например, оператор:

SELECT * FROM Pers

означает выбор всех полей.

В списке могут быть не только сами поля, но и любые выражения от них с арифметическими операциями +, —, *, /. После выражения может записываться псевдоним выражения в форме: AS <псевдоним>. В качестве псевдонима может фигурировать любой идентификатор, на который потом можно будет при необходимости ссылаться. Указанный псевдоним будет при отображении результатов фигурировать в заголовке таблицы.

Такими простыми средствами создаются аналоги вычисляемых полей, которые при использовании компонента Table требовали гораздо больших усилий и написания обработчика события OnCalcFields. Впрочем, в обработчике можно было написать сколь угодно сложную программу вычисления, что в данном случае затруднительно. Правда компонент Query, работающий в C++Builder с SQL, позволяет создавать вычисляемые поля и с помощью обработчика события OnCalcFields.

Ниже представлена таблица форм условия отбора, задаваемого после ключевого слова WHERE. Это условие определяет критерий, по которому отбираются записи. Оператор Select отбирает только те записи, в которых заданное условие истинно. Условие может включать имена полей (кроме вычисляемых), константы, логические выражения, содержащие арифметические операции, логические операции and, or, not и операции отношения:

Тип Значение
= равно
> больше
>= больше или равно
< меньше
<= меньше или равно
!= не равно
like наличие заданной последовательности символов
between ... and диапазон значений
in соответствие элементу множества

Первые шесть операций очевидны. Например, оператор:

SELECT Fam FROM Pers WHERE Sex=false and Year_b > 1960

отберет записи, относящиеся к женщинам, родившимся после 1960 года.

Операция Like имеет синтаксис:

<поле> LIKE '<последовательность символов>'

Эта операция применима к полям типа строк и возвращает true, если в строке встретился фрагмент, заданный в операции как <последовательность символов>. Заданным символам может предшествовать и их может завершать символ процента "%", который означает, что любое количество любых символов. Если символ процента не указан, то заданная последовательность символов должна соответствовать только целому слову. Например, условие:

Fam LIKE 'А%'

означает, что будут отобраны все записи, в которых фамилия начинается с заглавной русской буквы "А" (операция Like различает строчные и прописные символы). Условию:

Fam LIKE 'Иванов%'

будут удовлетворять фамилии «Иванов» и «Иванова», а условию:

Fam LIKE '%ван%'

кроме этих фамилий будет удовлетворять, например, фамилия «Иванников».

Операция between ... and имеет синтаксис:

<поле> between <значение> and <значение>

и задает для указанного поля диапазон отбираемых значений. Например, оператор:

SELECT Fam, Year_b FROM Pers WHERE Year_b BETWEEN 1960 AND 1970

отберет записи сотрудников в заданном диапазоне возраста (включая граничные значения 1960 и 1970).

Операция In имеет синтаксис:

<поле> in (<множество>)

и отбирает записи, в которых значение указанного поля является одним из элементов указанного множества. Например, оператор:

SELECT Fam, Year_b FROM Pers WHERE Fam IN('Иванов', 'Петров', 'Сидоров')

отберет записи сотрудников с заданными фамилиями, а оператор:

SELECT Fam, Year_b FROM pers WHERE Yearjo IN(1950,1960)

отберет записи сотрудников указанных годов рождения.

Элемент оператора Select, начинающийся с ключевых слов ORDER BY, определяет упорядочивание (сортировку) записей. После этих ключевых слов следует список полей, определяющих сортировку. Можно указывать только поля. Фигурирующие в списке отобранных (в списке после ключевого слова SELECT). Причем эти поля могут быть и вычисляемыми.

Если в списке сортировки указано только одно поле, то сортировка производится по умолчанию в порядке нарастания значений этого поля. Например, оператор:

SELECT Dep, Fam, Year_b FROM Pers ORDER BY Year_b

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

SELECT Dep, Fam, Year_b FROM Pers ORDER BY Yearjb DESC

Если в списке после ORDER BY перечисляется несколько полей, то первое из них главное и сортировка проводится прежде всего по значениям этого поля. Записи, имеющие одинаковое значение первого поля упорядочиваются по значениям второго поля и т.д. Например, оператор:

SELECT Dep, Fam, Year_b FROM Pers ORDER BY Dep, Fam

сортирует записи прежде всего по отделам (значениям поля Dep), а внутри каждого отдела по алфавиту. Оператор:

SELECT Dep, Fam, Year_b, Sex FROM Pers ORDER BY Dep, Sex, Fam

сортирует записи по отделам, полу и алфавиту.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Поиск по сайту