Фильтрация по части составного индекса
В качестве условий фильтрации могут быть заданы не все поля текущего индекса, а только ведущее поле или группа ведущих полей. В частности, для предыдущего примера можно указать в качестве текущего индекс 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, который обычно также размещается в модуле данных.