Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ по лаб.раб Базы данных (очное отделение).docx
Скачиваний:
21
Добавлен:
11.11.2019
Размер:
2.78 Mб
Скачать
  1. Создание фильтра

Фильтр с помощью выпадающего списка

Для добавления данных в список можно использовать процедуру, представленную в листинге 1. Для использования в теле процедуры компонентов ADO необходимо в раздел uses включить ADODB.

Листинг 1

procedure addcombo(CB:TComboBox;DSet:TADODataSet; pole:string);

var i,cbi:integer;

begin

If CB.ItemIndex=-1 then CBI:=0 else CBI:=CB.ItemIndex;

CB.Items.Clear;

CB.Items.Add('<.все.>');

DSet.First;

for i:=1 to DSet.RecordCount do

begin

CB.Items.Add(DSet.Fieldbyname(pole).value);

DSet.Next;

end;

DSet.First;

CB.ItemIndex:=CBI;

end;

Вызов процедуры наполнения списка осуществляется, например, при показе или открытии окна с таблицей.

Примечание. С назначением переменных разобраться самостоятельно.

Для осуществления фильтрации используется поля набора данных Filter и Filtered. Filter используется для задания шаблона фильтрации вида <поле>оператор<значение>. Filtered используется для включения и отключения фильтрации.

В листинге 2 приведен пример использования.

Листинг 2

st:=st+'DOP_NABOR = '+#39+CBDopNabor.Text+#39;

DSet_Facts.Filter:=st;

DSet_Facts.Filtered:=True;

Реализация фильтра представлена на рисунках 6.18 и 6.19.

Рисунок 6.18 – Список для фильтрации

Рисунок 6.19 – Применен фильтр

по форме обучения

Фильтр с помощью процедуры

Для осуществления поиска с использованием компонента TADOStoredProc необходима отлаженная процедура фильтрации на сервере, компонент хранимой процедуры и источник данных (TDataSourse) для связи компонента хранимой процедуры с компонентом представления данных (TDBGrid). Источник данных связывается с процедурой аналогично набору данных (TADODataSet).

Для реализации компонента хранимой процедуры следует выполнить:

  1. Добавить на форму "Модуль Данных" компонент TADOStoredProc. Дать ему осмысленное имя, связанное с выполняемыми функциями (пример: SPFiltrSurname)

  2. Связать его с компонентом подключения к БД через свойство connection.

  3. Выбрать хранимую процедуру на сервере (свойство ProcedureName, рисунок 6.20).

  4. Удостоверится, что все параметры от сервера передались верно, проверив список параметров (свойство Parametrs).

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

Листинг 3

Рисунок 6.20 – Компонент

Хранимой процедуры

procedure TFmDM.FiltrSurname(Surname: string);

begin

SPFiltrSurname.Close;

SPFiltrSurname.Parameters.ParamByName('@SURNAME').value:= Surname;

SPFiltrSurname.Open;

end;

Рисунок 6.20 ‑ Применен фильтр с использованием хранимой процедуры

  1. Создание поиска

Для поиска используется метод Locate компонента TDataSet.

Метод осуществляет поиск записи в наборе данных

Определение Класс TDataSet

type

TLocateOption = (loCaseInsensitive, loPartialKey);

TLocateOptions = set of TLocateOption;

function Locate(const KeyFields: string; const KeyValues: Variant;

Options: TLocateOptions): Boolean;

Описание

Метод Locate является, наряду с Lookup, SetKey и FindKey, методом поиска записи в наборе данных. В качестве первого параметра KeyFields передается строка, содержащая список ключевых полей, по которым осуществляется поиск. В качестве второго параметра передается KeyValues - массив ключевых значений. Ищется запись, в которой значения полей KeyFields совпадают с заданными в KeyValues. Третий параметр Options является множеством опций, элементами которого могут быть loCaseInsensitive - нечувствительность поиска к регистру, в котором введены символы, и loPartialKey - допустимость частичного совпадения. Метод возвращает false, если искомая запись не найдена.

Метод Locate отличается от методов SetKey и FindKey прежде всего отсутствием необходимости индексировать определенным образом набор данных. В силу этого Locate более прост и универсален. Кроме того метод Locate, в отличие от SetKey и FindKey, применим к компонентам Microsoft ActiveX Data Objects (ADO) - например, ADOTable и ADOQuery, а также к компонентам InterBase Express (IBX) - например, IBTable и IBQuery. Метод Locate не требует индексации набора данных. Но если набор данных индексирован по полям KeyFields, то поиск производится быстрее.

При поиске по нескольким полям можно воспользоваться функцией VarArrayOf, которая формирует тип Variant из задаваемого ей массива параметров любого типа (листинг 4). Пример работы приведен на рисунке 6.21.

Листинг 3

DSetAbitur.Locate('Reg;Fam',VarArrayOf([EReg.Text, EFam.Text]), [loCaseInsensitive,loPartialKey]);

Примечание. Для использования метода locate необходимо объявить модуль DB.

Рисунок 6.21 – Курсор набора данных установлен на найденной записи