Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование БД в Delphi ВТиП.doc
Скачиваний:
53
Добавлен:
17.03.2016
Размер:
3.62 Mб
Скачать
    1. ИспользованиякомпонентаtQuery

      1. Свойство sql

Свойство

property SQL: TStrings;

является центральным для компонентаTQuery и является коллекцией (набором) строк, в которую на этапе разработки или прогона программы помешается текст запроса.

Рисунок 4.45 – СвойстваSQL

Для введения текста запроса на этапе разработки нужно раскрыть и использовать связанный со свойством SQL многострочный текстовый редактор (рисунок 7.5). Приведенный текст запроса совпадает с текстом запроса рисунка 7.2 и почти в точности, за исключением названий двух полейFNameиTName,повторяетНДtbNakls, отображаемый в сеткеDBGrid1программы из раздела3:

Рисунок 4.46 – Текст запроса в окне редактора свойстваSQLс текстом запроса

Кроме того, если щелкнуть на кнопке Code Editor, то для формирования текста запроса можно использовать кодовый редактор среды Delphi (рисунок 4.6).

Рисунок 4.47 – Текст запроса в окне редактора кода средыDelphi

Как видно из рисунка 4.6, кодовый редактор Delphi автоматически выделяет в тексте зарезервированные слова SQL.

Закрыть окно кодового редактора можно нажатием клавиш Ctrl+F4 или выбором команды Close Page в его контекстном меню.

Примечание. Для некоторых БД в текст SQL-запроса можно включать комментарии, например для БД PostgreSql.

При любом изменении свойств компонента-запроса он автоматически переходит в неактивное состояние (его свойство Active получает значение False). После изменения текста компонент следует открыть заново, то есть установить Active=True.При этом автоматически будет проверен синтаксис запроса и он будет отправлен на выполнение.

Примечание 1. Синтаксис SQL-операторов проверяется при установке свойства Active = true или при их выполнении методом Open или ExecSQL.

Примечание 2. Если текст запроса размещен на этапе разработки программы, для такого запроса можно создать объекты-поля.

Примечание 3. Присоединение к запросам полей из других запросов или таблиц и соответственно создание объектов-столбцов для их отображения смысла не имеет.

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

      1. Методы Open и ExecSql

Помимо установки свойства Active = true компонент TQuerу имеет 2-ва метода Open и ExecSQL для выполнения запроса во время выполнения программы.

Метод Open используется для активизации запроса, возвращающего НД, то есть для активизации запроса SELECT. Например, для запроса quNakls, расположенного в модуле DM, получим:

DM.quNakls.Open;

а для запроса quNakls, расположенного на главной форме fmNakls, получим:

quNakls.Open;

Метод ExecSQL используется для активизации запросов, не возвращающих данные, то есть для активизации запросов CREATE, INSERT, DELETE, UPDATE, DROP и т.п.

Следует подчеркнуть:

  • при любом изменении свойств компонента-запроса, в том числе при занесении в свойство SQL нового запроса, он автоматически переходит в неактивное состояние (его свойство Active получает значение False). Для выполнения введенного запроса компонент следует открыть заново, то есть выполнить метод Open или ExecSQL, либо установить Active = True.

  • синтаксис SQL-операторов проверяется только при их выполнении методом Open или ExecSQL или при установке свойства Active = true.

Примечание 1. Размещение компонент работы с БД в отдельном модуле данных является рациональным во многих отношениях. Однако компонент TQuery можно размещать на форме, к которой он относится. При этом в свойстве DatabaseName компонента-запроса необходимо указывать не локальный псевдоним БД в программе - BiblData, а псевдоним БД в BDE – BiblDataMdb.

Примечание 2. Последующие примеры выполнены из расчета использования СУБД Access. При использовании другой СУБД возможны некоторые отличия. Так для СУБД PostgreSQL требуется имена таблиц и полей заключать в двойные кавычки.

      1. Схема программного формированияSQL-запроса

Ниже приводится традиционная схема программного формирования и активизации SQL-запроса. Она состоит в следующих шагах:

  1. Закрытие текущего запроса, если ранее он был открыт на этапе проектирования или выполнения программы;

  2. Очистка текста – свойства SQL, текущего запроса;

  3. Формирование нового текста SQL-запроса;

  4. Заненсение текста SQL-запроса в свойство SQL компонента TQuery;

  5. Открытие или активизация запроса;

  6. В случае результативного выполнения запроса Select выполняется переход к первой записи временной таблицы, содержащей результат запроса.

Ниже приводится соответствующий фрагмент текста программы. При этом компонент quNakls расположен на главной форме.

var SQLTxt: string;

begin

quNakls.Close; // Закрытие запроса

quNakls.SQL.Clear; // Очистка запроса

// Формирование нового текста запроса

SQLTxt := 'SELECT NaklID, NDate, FName, TName, NSum, NFirm, ' +

'NPayedSum, NRetSum, NCoeff, NretDate ' +

'FROM Nakls, Firms, TypeNakl ' +

'WHERE FirmID = NFirm AND TypeID = NType AND ' +

'NSum > 10000 AND NType IN (0, 6) AND ' +

'NDate = "02.03.2000" ';

quNakls.SQL.Add(SQLTxt); //Занесение нового текста запроса в свойство SQL

quNakls.Open; // Открытие запроса

quNakls.First; //Переход к первой записи результата запроса

end;