Мегаобучалка Главная | О нас | Обратная связь


FROM TEACHER, PREDMET, TEACH_PRED



2016-09-16 303 Обсуждений (0)
FROM TEACHER, PREDMET, TEACH_PRED 0.00 из 5.00 0 оценок




WHERE TEACHER.Num_teacher = TEACH_PRED.Num_teacher

AND PREDMET.Num_predmet = TEACH_PRED.Num_predmet

Назовем компоненту QT_pred.

Запросы бывают трех видов:

· статические,

· динамические,

· параметрические.

Допускаются смешанные запросы: статические параметрические и динамические параметрические.

Выше приведенные примеры запросов являются статическими и создаются на этапе конструирования программы.

Динамические запросы формируются во время выполнения программы, путем изменения свойства SQL компоненты TQuery. Свойство SQL компоненты TQuery имеет строковый тип и поэтому содержимое этого свойства может формироваться программно методами Add (добавить строку), Delete (удалить строку), Clear (очистить все) и прочими. Такой подход уменьшает количество используемых компонентов, но может привести к возрастанию программного кода.

Параметрическим является запрос, в SQL-операторе которого в процессе выполнения приложения могут изменяться отдельные его составляющие. Например, можно отбирать данные об учениках с переменным полем ball. В этом случае свойство SQL должно иметь следующий вид:

SELECT FIO_pupil FROM PUPIL WHERE PUPIL.ball=:b

Имя, предваренное символом «:», является параметром запроса.

Так как в дальнейшем нам потребуется выводить отчет о нагрузке определенного учителя, создадим следующий динамический запрос:

SELECT * FROM TEACHER, PREDMET, TEACH_PRED

WHERE TEACHER.Num_teacher = TEACH_PRED.Num_teacher AND PREDMET.Num_predmet = TEACH_PRED.Num_predmet AND TEACHER.FIO_teacher = :ft

Назовем компоненту QNagruzka.

При этом нужно скорректировать свойство Params компоненты TQuery.

Если задано свойство SQL так, как определено выше, то свойство Params будет иметь вид (рис. 91):

Рис. 91. Свойство Params параметрического запроса

Значения параметров параметрического запроса должно быть установлено в процессе выполнения программы с помощью метода ParamByName. Например:

 

DM.QT_pred.ParamByName('ft').Value:='Иванова И.И.';

 

Технология работы с параметрическим запросом такова: вначале НД делается неактивным, затем присваиваются значения параметрам запроса, далее запрос подготавливается к многократному использованию методом Prepare и, наконец, НД становится активным. Это будет показано в дальнейшем. Для освобождения выделенных запросу ресурсов (буфер BDE) используется метод UnPrepare.

Свойство Activeизначально равно False (запрос не открыт); он будет открываться вызовом метода компоненты Open при показе соответствующей формы, а закрываться – вызовом метода компоненты Close при закрытии формы.

Для каждой компоненты TQuery и TTable необходимо сделать доступными все поля. Для этого, сделав текущей нужную компоненту,следует нажать правую кнопку мыши, выбрать пункт контекстного меню Fields Editor. Появится окно, изображенное на рис. 92:

Рис. 92. Окно доступных полей

Также можно включать в набор поля выборочно, выбрав пункт Add Fields... (рис. 93):

Рис. 93. Добавление всех полей

Для проверки правильности установки всех свойств компоненты TQueryследует при разработке проекта присвоить ее свойству Activeзначение True, что соответствует открытию соответствующего НД. С каждой компонентой TQuery также должна быть связана компонента TDataSource, в свойстве DataSet которой нужно выбрать имя соответствующей таблицы.

Для нашего примера модуль данных изображен на рис. 94:

Рис. 94. Созданный модуль данных

Сделаем так, чтобы в таблице TTeacher данные упорядочивались по полю ФИО учителя, для чего в качестве значения свойства IndexName таблицы выберем из выпадающего списка созданный ранее в DataBase DeskTop индекс Ind_FIO. Если требуется сменить текущий индекс во время выполнения приложения, следует использовать строку вида: TTeacher.IndexName:='Ind_FIO'; или явно указать индексное поле: TTeacher.IndexFieldName:='FIO_teacher'.

Набор данных (НД) может находиться в одном из следующих состояний (оно определяется значением свойства Stateсвязанной компоненты TDataSource), из каждого из которых его можно перевести в другое, что показано в таблице 1:

Таблица 1. Состояния НД

Состояние Краткое описание Способ перевода в другое состояние
DsInactive НД закрыт Перевод в состояние dsBrowse с помощью вызова метода TQuery.OpenилиTTable.Open
DsBrowse Просмотр данных без изменения (состояние по умолчанию после открытия) Перевод в состояние dsInactive с помощью вызова метода TQuery.Closeили TTable.Close. Перевод в состояние dsEdit в результате выполнения метода Edit компоненты TTable. Перевод в состояние dsInsert в результате выполнения метода Insert компоненты TTable
DsEdit НД находится в состоянии редактирования После вызова метода Post компоненты TTableпроисходит перевод в состояние dsBrowse
DsInsert НД находится в состоянии добавления новой записи После вызова метода Post компоненты TTableпроисходит перевод в состояние dsBrowse

Компонента TTableможет обрабатываться методами для последовательной обработки открытого НД (Например, это может понадобиться при программной реализации ссылочной целостности, когда при удалении записи родительской таблицы необходимо найти для удаления подчиненные записи дочерней). Для этой цели имеются следующие свойства и методы компоненты:

property EOF:Boolean; //Проверка, достигнут ли конец НД;

procedure First; //Установка указателя на первую запись НД;

procedure Next; //Переход к следующей записи НД;

procedure Last; //Установка указателя на последнюю запись НД;

procedure Prior; //Переход к предыдущей записи НД.

 

Для поиска необходимых данных применяются следующие методы:

function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean; – Поиск в НД первой записи, поля которой совпадают с указанными значениями и установка ее в качестве текущей;

function Lookup(const KeyFields: String; const KeyValues: Variant; const ResultFields: String) :Variants; – Находит запись, удовлетворяющую условию, но не делает ее текущей, а возвращает значения некоторых полей этой записи;

function FindKey(const KeyValues: array of const): Boolean; – Точный поиск записи по индексным полям; возвращает результат (true, false) и указатель текущей записи;

procedure FindNearest(const KeyValues: array of const); – Инкрементальный локатор, используется для уточняющего поиска.

Компоненты TQueryиTTableимеют метод FieldByName, аргументом которого является строка с именем поля; метод позволяет обращаться к полю по его имени. Например:

 

TPupil.FieldByName('FIO_pupil').Value := 'Иванов И.И.';

 

Аналогично можно получать значение поля конструкцией вида «компонента TTable или TQuery[‘имя_поля’]»:

 

TPupil ['FIO_pupil'] := 'Иванов И.И.';

 

Свойство Fields позволяет обращаться к полю НД по его индексу (порядковому номеру):

 

TPupil.Fields[1].Value := 'Иванов И.И.';

 

Записи НД можно фильтровать. Свойство Filter позволяет задать критерий фильтрации. Синтаксис свойства похож на синтаксис секции WHERE SQL-запроса. Строку критерия фильтрации можно ввести на этапе конструирования формы или во время прогона программы:

 

TPupil.Filter := ([Ball] >3) AND ([Ball]<5);

TPupil.Filtered := True;

 

НД также имеет свойство Constraints, представляющее собой коллекцию объектов TCheckConstraints, каждый из которых определяет ограничение, накладываемое на значение одного или более полей. Список ограничений в инспекторе объектов выглядит следующим образом (рис. 95):

Рис. 95. Определение ограничений и сообщений о их нарушениях

Свойство CustomConstraints ограничения содержит текст ограничения на значение поля (полей) в SQL-подобном синтаксисе. Свойство ErrorMessage содержит текст сообщения об ошибке, которое будет выводиться, если пользователь предпримет попытку запомнить запись, поля которой не удовлетворяют данному условию.

Пример сообщения, выдаваемого при нарушении ограничения на значение поля (рис. 96):

Рис. 96. Выдаваемое сообщение при нарушении ограничения



2016-09-16 303 Обсуждений (0)
FROM TEACHER, PREDMET, TEACH_PRED 0.00 из 5.00 0 оценок









Обсуждение в статье: FROM TEACHER, PREDMET, TEACH_PRED

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (303)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)