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

Свойство SQL компонента TQuery доступно во время выполнения программы и его можно динамически изменять в зависимости от действий пользователя, например так:

if {условие} then begin

Query1.Close;

     //или Query1.Active := FALSE;

Query1.SQL.Text := ‘SELECT * FROM db_table’;

Query1.Open;

//или Query1.Active := TRUE;

else

{. . .}

Помимо указанного способа, управлять поведением компонента TQuery во время выполнения программы можно с помощью т.н. объектов-параметров (класс TParam). Для добавления таких объектов к приложению нужно в окне “Object TreeView” развернуть коллекции компонента TQuery и щелкнуть правой кнопкой мыши по коллекции Params и выбрать пункт меню “Add Item”. После этого будет создан новый компонент класса TParam. Выделив его мышью в окне “Object Inspector” можно будет настроить его свойства, из которых наиболее полезными являются:

  • Name – имя параметра (используется в SQL запросе);
  • Value – значение параметра (может быть динамически изменено во время выполнения программы);
  • DataType и Value.Type – тип параметра;
  • Precision – точность (важна для чисел с плавающей запятой);
  • Size – размер (для строк и двоичных значений, не подлежит обязательному заданию).

После создания объектов-параметров имеет смысл изменить SQL запрос, содержащийся в свойстве SQL компонента Query1:

SELECT num, types.tip_name, price

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

WHERE (rooms.tip = :ROOM_TYPE) AND (price = :ROOM_PRICE);

При использовании имен объектов-параметров в запросах, их имена должны предваряться символом двоеточия (:). Теперь, программно изменяя во время выполнения приложения значения, содержащиеся в свойстве Value компонентов TParam можно управлять поведением компонента TQuery, не изменяя его свойства SQL.

Чтобы получить доступ к компонентам TParam программно во время выполнения приложения, можно воспользоваться методом класса TQuery ParamByName, возвращающим ссылку на объект TParam с указанным в качестве параметра метода именем:

Query1.ParamByName(‘ROOM_TYPE’).AsInteger := 2;

Класс TParam имеет набор методов для обращения к значению, хранящемуся в его свойстве ValueAsBCD, AsBoolean,  АsByte, AsDate, AsDateTime, AsCurrency, AsFloat, AsInteger, AsSmallInt, AsMemo, AsString, AsTime, AsWord. С помощью этих методов можно обращаться к значению параметра, как к переменной нужного типа.

Так же к объектам-параметрам компонента TQuery можно обращаться через его свойство Params, имеющее тип TParams и являющееся по сути массивом объектов типа TParam. Среди методов и свойств класса TParams стоит отметить следующие:

AddParam(Value: TParam) – добавить существующий объект-параметр в массив параметров;

CreateParam(FldType: TFieldType; const ParamName: string; ParamType: TParamType): TParam – создать новый объект-параметр и добавить его в массив параметров;

RemoveParam(Value: TParam) – удалить существующий объект-параметр из массива и освободить занимаемую им память;

Items[Index: Word]: TParam – массив объектов-параметров, с помощью которого можно получить доступ к любому из них через его индекс;

Count: Integer – количество объектов-параметров в массиве.

Для управления отображением информации, получаемой из компонента TQuery, в сетке TDBGrig предусмотрена возможность работы с объектами-полями (TField), подобно TTable. Различия заключаются в том, что объекты-поля у TTable создаются на стадии проектирования с помощью мастера, т.к. набор полей, возвращаемых TTable известен заранее, а управление объектами-полями у TQuery необходимо выполнять во время работы приложения.

Для управления объектами-полями в классе TQuery предусмотрены следующие свойства и методы:

Fields: TFields – коллекция объектов-полей, представляет собой объект класса TFields;

FieldCount: Integer – количество объектов полей, ассоциированных с набором данных, возвращаемых классом TQuery;