Фильтрация по части составного индекса

В качестве условий фильтрации могут быть заданы не все поля текущего индекса, а только ведущее поле или группа ведущих полей. В частности, для предыдущего при­мера можно указать в качестве текущего индекс Tovar+GrNum.

Тогда применение метода

SetRange([Editl.Text], [Editl.Text + 'яя']);

означает, что, поскольку в квадратных скобках в качестве начального и конечного условия фильтрации указаны не два значения поля, а одно, фильтрацию следует про­водить на предмет соответствия ведущего поля индекса (в нашем случае Tovar) задан­ному поисковому значению (в нашем случае начальное значение – Edit1.Text, конеч­ное значение – Edit1.Text + 'я я').

Ограничения возможностей фильтрации

Заметим, что рассмотренный механизм фильтрации позволяет отфильтровывать только те записи, у которых значения ключевых полей больше или равны нижней границе и меньше или равны верхней границе фильтрации. Иными словами, затрудни­тельно задать сложное условие типа «все записи, у которых поле А < 100 или поле Z содержит вхождение строки поиск».

При возникновении подобных проблем вместо компонента ТТаble нужно исполь­зовать компонент TQuery.

СОВМЕЩЕНИЕ КУРСОРОВ ДВУХ НД

Если в программе одновременно используются два и более компонента TTable, ра­ботающие с одной и той же физической таблицей БД, может возникнуть необходи­мость совмещения курсоров двух НД. Для этой цели применяется метод синхрониза­ции GotoCurrent. Например:

Tablel.GotoCurrent(Table2) ;

что означает установку курсора в НД Table1 на ту же запись, на которой располагается в данный момент курсор НД Table2.

Однако на практике «размножение» идентичных TTable в двух или более формах встречается крйне редко и обычно свидетельствует о неправильном конструировании программы. Вместо того чтобы совмещать курсоры у двух TTable, нужно работать с одним компонентом, помещенным в общедоступный модуль – на главную форму программы или в специально для этих целей предназначенный модуль данных TDataModule. В этом случае в любой программной форме, в которой требуется работа с TTable, нужно лишь сослаться в предложении Uses на модуль данных. После этого форме станут доступны компонент TTable и связанный с ним компонент TDataSourse, который обычно также размещается в модуле данных.