Изменение фильтра бенда Data

отредактировано April 2010 Раздел: FastReport .NET
если мне не изменяет память, то это уже обсуждали, но к сожалению я не смог найти это в разделе...
а может быть мне только кажется, что я это с вами обсуждал )))

в целом проблема такая

есть отчёт, в нём есть BAND DATA1 у которого параметр "фильтр" пустой.
то есть отображается всё.
есть форма (внутрефастрепортовская), в ней есть textbox'ы и прочая муть
при нажатии кнопки OK на этой форме выполняется код:

Data1.Filter = getFilter()

процедура getFilter() формирует и возвращает строку для фильтрации: что то вроде Substring(<поле>, ,блаблабла,блаблабла) = <блаблабла>, условий там может быть достаточно много и они всякие разнообразные. Но при выполнении выскакивает ошибка (при чём источник не указывается (то есть она в дезигнере внизу (в панели ошибок):

: error BC30451: Name 'Substring' is not declared
: error BC30451: Name 'Length' is not declared

при этом, если я указываю в поле Filter тоже самое (то есть точную копию строки, которую передаю в коде) всё работает отлично, но стоит мне изменить хоть байт в этой строке, отчёт ругается точно также :)

где я туплю, объясните плиз.


P.S. появилась какая то неведомая ошибка, когда запрос был простым (по сути в 1 таблицу) фаст репорт выполнял всё отлично, когда в запросе появилась 4 трабл. , 3 JOIN и подзапросы FastReport ругается на коннешн таймаут, хоть в соседней программе QueryAnalazer запрос выполняется мгновенно, многократно и вообще без заторов... пока точно не могу понять в чем касяк, но точно не в сервере :) пробую ковырять connection пропертиз

Комментарии

  • отредактировано 13:25
    С фильтрами (и вообще с любыми выражениями) ситуация такая. Перед запуском отчета происходит его компиляция. При этом FastReport опрашивает все объекты и собирает выражения, содержащиеся в них. Все это добро компилится в сборку (ее содержимое можно увидеть, если сохранить отчет в виде файла .cs). Что произойдет, если в отчете есть код, динамически присваивающий выражение объекту, типа:
    Text1.Text = "[SomeFunc(1,2,3)]
    Выражение SomeFunc(1,2,3) на этапе компиляции отчета неизвестно, и в скомпилированную сборку не попадет. При запуске отчета и обработке объекта Text1 FastReport обнаружит неизвестное выражение и скомпилит еще одну сборку, к которой будет обращаться для вычисления именно этого выражения. В некоторых случаях этот подход не работает (например, в выражении есть обращение к локальной переменной). В любом случае это приводит к замедлению работы отчета (требуется не одна компиляция, а несколько).
    Как обойти проблему: создайте в отчете невидимый объект Текст (Visible = false). В нем перечислите все выражения, которые могут понадобиться.
  • отредактировано 13:25
    По поводу Connection: попробуйте установить св-во CommandTimeout у объекта Connection в отчете.
  • отредактировано 13:25
    Увеличение таймаута помогло безусловно, но дело не в этом, почему в Query Analaz' этот запросы выполняется мгновенно...
    у меня правда есть подозрения, что проблема у меня аппаратного характера ))

    на счет вашего примера с текстовым полем. Проблема вся в том, что в фильтре может быть написать, по ситу что угодно, то есть строка формируется и каких то шаблонных выражений нет.
    как то можно, чтобы процедуру встроенные в фаст репорт были уже заранее скомпилированы?
  • отредактировано 13:25
    Возможно, Query Analyzer кеширует данные.

    Другой способ фильтрации данных: в бэнде указывается фильтр
    GetFilter()
    
    в коде делается метод
    private bool GetFilter()
    {
      // здесь фильтруем и возвращаем true, если текущая запись нужна
    }
    

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.