-
Есть IBQuery, который долго выполняется. Есть функция пользовательской фильтрации данных реализованная через Событие OnFilterRecord установкой Accept.
Как можно применить фильтрацию без переоткрытия запроса.
-
в ADO просто применить фильтр... он и делается без запроса (если, как по умолчанию, с clUseClient). тем более событие OnFilterRecord чисто дельфийское, никак на запрос не влияет.
естественно фильтровать будет только по отобранному при открытии (запросе), если в нем данных нет, а в базе по новому фильтру есть... обломится.
если в IB по другому, а нужно именно так, то переходи на ADO
-
Вопрос в том, как вызвать событие OnFilterRecord без переоткрытия запроса.
В деталях задача выглядит так:
Пользователь может создать структуру для фильтрации, которая преобразуется в XML и в виде строки передается в функцию , которая определяет - подходит запись под условие или нет.
На событии OnFilterRecord стоит обработчик
procedure TForm.ListQueryFilterRecord(DataSet: TDataSet; var Accept: Boolean); begin Accept:=DoFilter(DataSet,Filter_str); end;
Вот пользователь понасоздавал условий и нажал кнопку "Применить".
Что надо сделать чтобы переопределить для всех записей запроса признак видимости Accept?
-
filtered := false filtered := true
-
> noob_one (31.05.13 17:38) [2]
чукча писатель?
-
> Медвежонок Пятачок © (31.05.13 19:31) [3] > filtered := false > filtered := true
Увы, это вызывает переоткрывание запроса два раза.
turbouser - мистер Вежливость?
|