Разработка и эксплуатация АИС: Методическое пособие для выполнения лабораторных работ № 9-15, страница 5

FieldList: TFieldList – список объектов-полей, принадлежащих набору данных, представляет собой объект класса TFieldList;

FieldValues[const FieldName: string]: Variant – позволяет получить доступ к значениям поля, имя которого указано в индексной константе FieldName.

Класс TFields, инкапсулирующий коллекцию объектов-полей набора данных, имеет следующие свойства и методы:

Count: Integer – количество объектов-полей в коллекции;

Fields[Index: Integer]: TField – индексированный массив объектов-полей, содержащихся в коллекции.

FieldByName(const FieldName: String): TField – возвращает объект-поле с заданным именем;

FieldByNumber(FieldNo: Integer): TField – возвращает объект-поле с заданным порядковым номером;

FindField(const FieldName: String): TField – возвращает обект-поле с заданным именем или NIL, если такого поля не существует в активном наборе данных;

GetFieldNames(List: TStrings) – возвращает список имен имеющихся в коллекции объектов-полей в переданный в качестве параметра компонент класса TStrings;

Add(Field: TField) – добавляет существующий объект-поле к коллекции;

Remove(Field: TField) – удаляет существующий объект-поле из коллекции и освобождает выделенную под него памыть.

Для того, чтобы манипулировать объектами-полями во время выполнения приложения, необходимо знать свойства и методы класса TFiled:

Alignment: TAlignment – выравнивание текста ячейки при отображении, возможные значения:

taLeftJustify – по левому краю;

taCenter – по центру;

taRightJustify – по правому краю;

CanModify: Boolean – определяет, можно ли редактировать значения поля в сетке TDBGrid;

DisplayLabel: String – заголовок колонки сетки TDBGrid, соответствующей данному полю;

DisplayWidth: Integer – размер колонки сетки TDBGrid, соответствующей данному полю;

FieldName: String – имя поля реальной БД (имя, которое было присвоено поля в SQL запросе);

IsNull: Boolean – показывает, что содержимым поля является значение NULL;

ReadOnly: Boolean – устанавливает режим “только чтение” для поля;

Visible: Boolean – управляет отображением поля в сетке TDBGrid.

Для иллюстрации возможностей манипулирования объектами-параметрами и объектами-полями компонента TQuery добавим в программу возможность производить поиск свободного номера с нужной стоимостью и сортировать номера по типу и по признаку занятости.

Внешний вид приложения можно увидеть на рисунке ниже:

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

Const

Sql_begin = ‘SELECT num, types.tip_name, price, fio

FROM (rooms LEFT JOIN clients ON (client = clients.id))

INNER JOIN types ON (types.tip = rooms.tip)

WHERE (price < :ROOM_PRICE)’;

Для возможности сортировки результатов запроса по выбранному пользователем критерию и отображения только нужных комнат (всех, либо только свободных, либо только занятых) создадим процедуру, анализирующую состояние флажков групп “Сортировать по:” и “Отображать:” и перестраивающую SQL запрос в зависимости от их состояния:

procedure TfrmRoomsView.SortRooms;

var

sortField : String;

showExpr : String;

begin

  if roomSort.ItemIndex = 1 then

sortField := 'fio;'

  else

sortField := 'tip_name;';

case roomShow.ItemIndex of

0: showExpr := '';

1: showExpr := ' AND (fio IS NULL)';

2: showExpr := ' AND (fio IS NOT NULL)';

  end;

query1.Close;

query1.SQL.Text := sql_begin + showExpr + ‘ ORDER BY ’ + sortField;

query1.Open;

end;

После создания процедура ее нужно прописать в обработчики выбора нового пункта в группах “Сортировать по:” и “Отображать:”

procedure TfrmRoomsView.roomSortClick(Sender: TObject);

begin

SortRooms;

end;

procedure TfrmRoomsView.roomShowClick(Sender: TObject);

begin

SortRooms;

end;