Событие OnFilterRecord возникает, когда в свойстве filtered устанавливается значение True. Метод-обработчик события TFilterRecordErent имеет два параметра. В параметре DataSet передается фильтруемый набор данных, а в параметре Accept - переменная, в которую помещается значение True в случае, если текущая запись соответствует условиям фильтрации. Пример приведен в листинге 2.6.
Листинг 2.6. Пример использования события OnFilterRecord
procedure TForml.TablelFilterRecord(DataSet: TDataSet;
var Accept: Boolean):
begin
Accept:=((DataSet.FieldByName('Size').AsInteger+2)<10)
and ((DataSet.FieidByNameC'Weight').AsFloat/2)<2);
end;
В современных условиях практически все операции выборки, сортировки, поиска осуществляются средствами SQL.
Состояния набора данных Набор данных может находиться в нескольких состояниях, в которые он переходит в процессе своего функционирования, Состояния меняются в результате перемещения по набору данных, редактирования, ввода новых записей и т. д. Отслеживая текущее состояние набора данных, программист может предпринять какие-либо действия. Текущее состояние набора данных содержится в свойстве State, значение которого принадлежит перечислимому типу TOataSetState. Возможные состояния указаны в табл. 2.1.
Таблица 2.1. Состояния набора данных
Значение свойства |
Состояние набора данных |
dslnactive |
Набор данных закрыт |
dsBrowse |
Набор данных находится в состоянии просмотра.
Редактирование невозможно. Данное состояние является
«обычным», устанавливается по умолчанию |
dsEdit |
Выбранная запись может быть отредактирована |
dslnsert |
Запись «помещена» в набор, но не утверждена в нем методом
Post. Запись может быть изменена, принята или отменена |
dsSetKey |
Используется механизм поиска по ключу
или по диапазонам |
dsCalcFields |
Устанавливается при возникновении события OnCalcFields |
dsFilter |
Устанавливается при возникновении события
OnFilterRecord |
dsNewValue |
Устанавливается при обращении к свойству NewValue поля
набора данных |
dsOldValue |
Устанавливается при обращении к свойству OldValue поля
набора данных |
dsCurValue |
Устанавливается при обращении к свойству CurValue поля
набора данных |
dsBlockRead |
Устанавливается в случае «ускоренного перемещения по
набору данных». Переводится в данный режим вызовом
метода DisableControls |
dsInternalCalc |
Устанавливается при расчете значений полей, для которых
FieldKind имеет значение fklnternalCalc |
dsOpening |
Устанавливается в момент открытия набора данных |
Набор данных может переходить в состояния dsNewValue, dsOldValue, dsCurValue, dsInternalCalc только в том случае, когда доступ к базе данных осуществляется через компонент TClientDataSet или используется кэш данных.
Когда набор открывается, ои находится в состоянии dsOpening. После того как он открылся, активируется состояние просмотра dsBrowse. Это состояние является основным для набора данных.
В листинге 2.7 приведен пример, в котором производится проверка того, находится ли набор данных в состоянии редактирования или вставки новой записи, после этого выполняется сохранение изменений.
Листинг 2.7. Демонстрация использования сведений о состоянии набора данных
with DataSet do begin
if state in [dslnsert. dsEdit] then
Post:
end;
|