Изменение фильтра бенда Data
если мне не изменяет память, то это уже обсуждали, но к сожалению я не смог найти это в разделе...
а может быть мне только кажется, что я это с вами обсуждал )))
в целом проблема такая
есть отчёт, в нём есть 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 пропертиз
а может быть мне только кажется, что я это с вами обсуждал )))
в целом проблема такая
есть отчёт, в нём есть 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 пропертиз
Комментарии
Text1.Text = "[SomeFunc(1,2,3)]
Выражение SomeFunc(1,2,3) на этапе компиляции отчета неизвестно, и в скомпилированную сборку не попадет. При запуске отчета и обработке объекта Text1 FastReport обнаружит неизвестное выражение и скомпилит еще одну сборку, к которой будет обращаться для вычисления именно этого выражения. В некоторых случаях этот подход не работает (например, в выражении есть обращение к локальной переменной). В любом случае это приводит к замедлению работы отчета (требуется не одна компиляция, а несколько).
Как обойти проблему: создайте в отчете невидимый объект Текст (Visible = false). В нем перечислите все выражения, которые могут понадобиться.
у меня правда есть подозрения, что проблема у меня аппаратного характера ))
на счет вашего примера с текстовым полем. Проблема вся в том, что в фильтре может быть написать, по ситу что угодно, то есть строка формируется и каких то шаблонных выражений нет.
как то можно, чтобы процедуру встроенные в фаст репорт были уже заранее скомпилированы?
Другой способ фильтрации данных: в бэнде указывается фильтр в коде делается метод