Поиск данных

Begin

Фильтрация данных

Фильтрация – выделение подмножества данных по какому-либо условию.

Записи можно отфильтровать по выражению либо диапазону.

Свойство Filtered компонента Table включает и отключает фильтрацию, а сам фильтр записывается в свойство Filter строкового типа:

Table1.Filter:= '<имя_поля>=<значение>';

Можно записать:

case RadioGroup1.ItemIndex of

0: Table1.Filter:= 'Adres=''Пермь''';

1: Table1.Filter:= 'Adres=''Москва''';

2: Table1.Filter:= 'Adres=''Ижевск''';

end;

И в зависимости от выбранной кнопки будет произведена фильтрация по тому или иному значению.

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

s:= Table1.FieldByName('Tovar').AsString;// выделено наименова

//по данному наименованию фильтруют подчиненную таблицу

Table2.Filtered:= True;

Table2.Filter:= 'Tovar=' + '''' + s + ''''; //если там записей нет, то выходит

If Table2.RecordCount = 0 then exit;

//если есть записи, то удаляет весь отфильтрованный набор данных

if Table2.RecordCount > 0 then

For i:=1 to Table2.RecordCount do Table2.Delete;

end;

Table1.Delete; // удаляют запись в главной таблице

end;

Table2.Filtered:= false; //отключает фильтр

LookUp (const KeyField s: string;

const KeyValues: variant;

const ResultFields: String): Variant; -

метод предназначен для поиска значения ResultFields в записи с ключевым полем KeyFields = KeyValues.

Res:= Table1.Lookup('Id', 2, 'Name');

Если ни одна запись набора не удовлетворяет заданному условию, то результат NULL.

Locate (const KeyFields: string;

const KeyValues: variant;

Options: TLocateOptions): Boolean; -

метод делает текущей самую первую запись набора данных, для которой выполнились условия совпадения значения KeyValues ключевого (индексированного!!!) поля KeyFields при опциях

loCaseInsensitive – без учета регистра,

loPartialKey – частичного совпадения.

Пример:

If not Table1.Locate('name', Edit1.Text, [loPartialKey, loCaseInsensitive ])

Then ShowMessage('Заданная строка не найдена');

Здесь поиск производится по не полному соответствию, а по частичному, т.е. достаточно ввести один символ, чтобы вывести записи, начинающиеся с этого символа, в противном случае - указанное сообщение.

Работа со связанными таблицами

Связь между таблицами организуется через поля связи.

Поля связи должны быть индексированы.

Связь между таблицами обычно вида 1:М, т.е. одна – главная, другая – подчиненная (Parents – Child).

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

Существуют требования к обеспечению целостности отношения.

Целостность сущностей каждое отношение должно описывать экземпляры только одной сущности и обладать первичным ключом (parent’s key).

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

Ссылочная целостность связываемые отношения должны иметь общие атрибуты (поля).

Существует 3 механизма обеспечения ссылочной целостности.

1. Запрещающий (prohibit) — нельзя изменять значение ключа родителя или удалять его, если ему соответствуют записи в дочерней таблице.

2. Каскадное удаление (cascade):

• при изменении значения ключа родительской таблицы автоматически изменяет соответствующие значения в дочерней таблице;

• удалить записи родительской таблицы можно лишь в том случае, если удалены зависимые записи в дочерней таблице.

3. При удалении записи, на которую имеются ссылки, во всех ссылающихся записях значение ключа автоматически становится неопределенным.

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

MasterSource: TDataSource – источник данных главной таблицы,

IndexName – текущий индекс подчиненный таблицы,

IndexFieldNames – поле связи текущего индекса подчиненной таблицы,

MasterField: String – поле связи индекса главной таблицы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: