Здравствуйте.
У нас есть приложение, которое работает на stireport 2010 года выпуска. В отчётах используются запросы к базе (oracle). В каких-то отчётах используются формы для запроса параметров, но в коде формы нет явного вызова метода Connect источников данных. Когда отчёт формируется, то источники самостоятельно подключаются к базе, несмотря на то что их свойство ConnectOnStart установлено в false. Более того, в некоторых отчётах есть источники с выключенным свойством ConnectOnStart, которые вызывают хранимки и эти источники никак в отчёте не используются. Но такое поведение наблюдается только у некоторых пользователей, т.е. у одних в отчёте есть данные, а у других нет, потому что отчёт запросы не делает.
Решили обновится до версии 2017.1.6, все источники, у которых свойство ConnectOnStart установлено в false больше не подключаются, пока явно не вызвать метод Connect. Увидел что появилось свойство Запрашивать только необходимые данные. Решил им воспользоваться, сделал простой отчёт с одним источником, у источника выключил свойство ConnectOnStart, данные из источника вывел на страницу, в результате на предпросмотре пусто. Включаем свойство "Запрашивать только необходимые данные", в предпросмотре данные появляются, хотя явного вызова метода Connect не было. Добавляем в отчёт форму, форма заполняет переменную, которая используется в запросе источника. На предпросмотре получаем ошибку, т.к. отчёт пытается выполнить запрос, а переменная ещё не инициализирована.
Что я делаю не так? Почему отчёт запрашивает данные до того, как закроется форма?
Пример отчёта во вложении
Разное поведение на разных машинах
Разное поведение на разных машинах
- Вложения
-
- Report.mrt
- (7.21 КБ) 359 скачиваний
Re: Разное поведение на разных машинах
Здравствуйте,
Не получилось воспроизвести ошибку. Уточните пожалуйста, какую ошибку вы получаете?
Поведение свойства ConnectOnStart менялось в одной из версий 2016.х.х для корректного поведения при подключении данных, а также после добавления свойства "Запрашивать только необходимые данные".
Спасибо.
Не получилось воспроизвести ошибку. Уточните пожалуйста, какую ошибку вы получаете?
Поведение свойства ConnectOnStart менялось в одной из версий 2016.х.х для корректного поведения при подключении данных, а также после добавления свойства "Запрашивать только необходимые данные".
Спасибо.
Re: Разное поведение на разных машинах
Скачать отчёт из вложения
Открыть в дизайнере, поменять строку подключения к базе
Нажать "предпросмотр", получаем ошибку "ORA-00936: missing expression"
Открыть в дизайнере, поменять строку подключения к базе
Нажать "предпросмотр", получаем ошибку "ORA-00936: missing expression"
Re: Разное поведение на разных машинах
Добрый день!
Вы не создали параметр tempVar в параметрах явно, и потом в Oracle bind-переменные указывают с двоеточием вначале, т.е. :tempVar, не как у вас {tempVar}, - в последнем случае, это скорее всего больше похоже на форматирование C# типа string.Format() или его упрощённая форма $"".
В итоге вам необходимо переписать запрос так:
P.S. Проверил на нескольких компьютерах, - поведение одинаковое везде, где одинаковый tnsnames.ora (на наших компах он, к примеру лежит в C:\oracle11203\network\admin\tnsnames.ora и содержание его везде одинаковое). Ещё может быть такой момент, что OracleClient на разных машинах разных версий, и тогда какие-то похожие, описываемые вами коллизии возможны. Стоит проверить всё вышеописанное.
Вы не создали параметр tempVar в параметрах явно, и потом в Oracle bind-переменные указывают с двоеточием вначале, т.е. :tempVar, не как у вас {tempVar}, - в последнем случае, это скорее всего больше похоже на форматирование C# типа string.Format() или его упрощённая форма $"".
В итоге вам необходимо переписать запрос так:
Код: Выделить всё
select sysdate from dual where 1 = :tempVar
- Вложения
-
- Clipboard01.png (44.57 КБ) 3950 просмотров
Re: Разное поведение на разных машинах
Вопрос не в том что используется в запросе переменные или код. В части отчётов используются переменные привязки, в части приходится вставлять выражения, которые изменяют текст запроса. Вопрос в том что при включенной опции "запрашивать только необходимые данные" и наличии формы в отчёте запросы выполняются ДО появления формы, а не после.
Re: Разное поведение на разных машинах
Здравствуйте,
В данном случае, необходимо задать дефолтное значение для переменной либо использовать параметры для источника данных.
Спасибо.
В данном случае, необходимо задать дефолтное значение для переменной либо использовать параметры для источника данных.
Спасибо.