Конференция "Базы" » Можно ли применить локальный фильтр без переоткрывания запроса
 
  • noob_one (31.05.13 16:54) [0]
    Есть IBQuery, который долго выполняется.
    Есть функция пользовательской фильтрации данных реализованная через Событие OnFilterRecord установкой Accept.

    Как можно применить фильтрацию без переоткрытия запроса.
  • sniknik © (31.05.13 17:10) [1]
    в ADO просто применить фильтр... он и делается без запроса (если, как по умолчанию, с clUseClient). тем более событие OnFilterRecord чисто дельфийское, никак на запрос не влияет.

    естественно фильтровать будет только по отобранному при открытии (запросе), если в нем данных нет, а в базе по новому фильтру есть... обломится.

    если в IB по другому, а нужно именно так, то переходи на ADO
  • noob_one (31.05.13 17:38) [2]
    Вопрос в том, как вызвать событие OnFilterRecord без переоткрытия запроса.

    В деталях задача выглядит так:

    Пользователь может создать структуру для фильтрации, которая преобразуется в XML и в виде строки передается в функцию , которая определяет - подходит запись под условие или нет.

    На событии OnFilterRecord стоит обработчик

    procedure TForm.ListQueryFilterRecord(DataSet: TDataSet;
     var Accept: Boolean);
    begin
     Accept:=DoFilter(DataSet,Filter_str);
    end;

    Вот пользователь понасоздавал условий и нажал кнопку "Применить".

    Что надо сделать чтобы переопределить для всех записей запроса признак видимости Accept?
  • Медвежонок Пятачок © (31.05.13 19:31) [3]
    filtered := false
    filtered := true
  • turbouser © (01.06.13 18:14) [4]

    > noob_one   (31.05.13 17:38) [2]

    чукча писатель?
  • noob_one (03.06.13 09:15) [5]

    > Медвежонок Пятачок ©   (31.05.13 19:31) [3]
    > filtered := false
    > filtered := true

    Увы, это вызывает переоткрывание запроса два раза.

    turbouser - мистер Вежливость?
 
Конференция "Базы" » Можно ли применить локальный фильтр без переоткрывания запроса
Есть новые Нет новых   [119677   +117][b:0][p:0]