|
|
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
Доброго дня всем! Вопросы от новичка, поэтому просьба не пинать. 1) Можно ли использовать в тексте sql-запроса переменные Ну например, есть такой код WHERE T.CODE = $V{MY_VAR} где $V{MY_VAR} скажем java.lang.String, которая инициализируется строкой "216" данная конструкция компилируется нормально, но при выполнении отчета валится с ошибкой "... Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][t4][1061][10303][3.62.56] Синтаксическая ошибка в условии ESCAPE. Подробности смотрите в прикрепленном модуле Throwable. ERRORCODE=-4463, SQLSTATE=42601 ..." на форуме Jasperа люди пишут, что у них такие конструкции работают (может ли это от того, что у меня DB2?) 2) Правда ли что в параметрах я не могу иметь доступа ни к полям запроса, ни к переменных, потому что параметры создаются до них? 3) есть ли возможность в дефолтное значение параметра засунуть РЕЗУЛЬТАТ произвольного запроса, не связанного с основным запросом отчета. ИМЕННО РЕЗУЛЬТАТ потому, что конструкция вида P!{} не работает (по крайней мере у меня?) 4) откуда растут ноги вопроса 3 попробую объяснить есть параметр запроса PERIOD_CODE - пользователь вводит это значение выбором из существующей таблицы базы данных CODE :: NAME 216 :: 01.2012 217 :: 02.2012 218 :: 03.2012 (это чтобы было понятно какбы месяц года в формате строки ММ.ГГГГ), в параметре оказывается строка например "216" в следующем параметре (целое число) пользователь вводит день месяца на основании этих двух параметров я пытаюсь сформировать дату которую надо передать в основной запрос что-то типа ENDDATE > <СФОРМИРОВАННЫЙ ПАРАМЕТР> последний вариант который я попробовал и на котором сломался окончательно был такой: Код: plsql 1. P.S. просьба извинить за сумбур - бьюсь головой уже 3-ий день ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 15:59 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
4. Хм... т.е. $P{par1} - это код, ссылающийся на дату в формате mm.rrrr, а $P{par2} - день? А почему нельзя сделать по рабоче-крестьянски: Код: plsql 1. ? НУ как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2012, 10:57 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
Баян, Каюсь, я привел только часть кода, полностью это будет так Код: plsql 1. идея была такая: 1)пользователь вводит номер дня внутри месяца, это целое число $P{DAY_OF_CALC} 2)пользователь выбирает из существующей таблицы "номер периода" (ну я не виноват, что его так назвали, а вообще-то это месяц года), это строка P{PERIOD_CODE} Т.е. у пользователя вываливается таблица вида Название - Начало_Периода - Окончание_Периода 01.2012 - 01.01.2012 - 31.01.2012 он тыкает на название периода и ему возвращается текстовая строка, которая является индентификатором этой записи в таблице PERIOD 3) Пользователь тыкает(или не тыкает) чекбокс, это параметр P{ALL_DAYS} в зависимости от которого выводятся или все договора для данного периода или только те у которых расчетная дата < $P{DAY_OF_CALC} 4) При этом надо проверить, чтобы дата окончания договора была после $P{DAY_OF_CALC} 5) здесь в дело вступает параметр P{CHECK_DATE} с типом String и дефолтным значением которе я привел выше P.S. почему нельзя по-рабоче крестьянски. Я честно не проверял, но у меня DB2 а у нее форма вызова функции to_date Код: plsql 1. 2. Взято отсюда Valid format strings are: 'YYYY-MM-DD HH24:MI:SS' where YYYY represents a 4-digit year value; MM represents a 2-digit month value (01-12; January=01); DD represents a 2-digit day of the month value (01-31); HH24 represents a 2-digit hour of the day value (00-24; If the hour is 24, the minutes and seconds values are zero.); MI represents a 2-digit minute value (00-59); and SS represents a 2-digit seconds value (00-59). P.P.S Я разбираюсь с JR и ireport всего месяц, так что не обессудьте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2012, 12:52 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
Я немножко переписал дефолтное значение для P{CHECK_DATE} теперь оно выглядит так: Код: sql 1. если вставляю выражение Код: sql 1. в обычный запрос (заменив предварительно параметры P{PERIOD_CODE} и P{DAY_OF_CLAC} на числа) то все работает замечательно, но как только запускаю iReport сразу валится ошибка: at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:326) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:186) at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:731) at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:629) at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1159) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:802) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:746) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:879) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][t4][1061][10303][3.62.56] Синтаксическая ошибка в условии ESCAPE. Подробности смотрите в прикрепленном модуле Throwable. ERRORCODE=-4463, SQLSTATE=42601 at com.ibm.db2.jcc.am.fd.a(fd.java:676) at com.ibm.db2.jcc.am.fd.a(fd.java:60) at com.ibm.db2.jcc.am.fd.a(fd.java:112) at com.ibm.db2.jcc.am.jb.c(jb.java:947) at com.ibm.db2.jcc.am.jb.v(jb.java:7474) at com.ibm.db2.jcc.am.jb.a(jb.java:2143) at com.ibm.db2.jcc.am.jb.prepareStatement(jb.java:774) at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:256) ... 12 more Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][1064][10658][3.62.56] Нераспознанное ключевое слово в условии ESCAPE: PERIOD_CODE. ERRORCODE=-4463, SQLSTATE=42601 at com.ibm.db2.jcc.am.fd.a(fd.java:676) at com.ibm.db2.jcc.am.fd.a(fd.java:60) at com.ibm.db2.jcc.am.fd.a(fd.java:103) at com.ibm.db2.jcc.am.bd.a(bd.java:53) at com.ibm.db2.jcc.am.bd.a(bd.java:115) at com.ibm.db2.jcc.am.jb.c(jb.java:944) ... 16 more Print not filled. Try to use an EmptyDataSource... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2012, 16:35 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
Кто-нибудь может разъяснить, что это такое Нераспознанное ключевое слово в условии ESCAPE или подсказать в какую сторону копать? Подобная ошибка раньше у меня встречалась только когда пытался переменную засунуть в текст sql-запроса в JR, но сейчас вроде параметр, я уже и вариант с "!" пробовал - те же грабли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2012, 16:42 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
andrejjj, А вам не кажется странным что в самом начале условия один параметр у вас $P{ALL_DAYS}, а в конце: P{PERIOD_CODE} без доллара? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2012, 18:34 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
sanBez, Да и в строку его наверно надо конкатенировать как "начало условия"+$P{PERIOD_CODE}+"конец условия" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2012, 18:42 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
спасибо, sanBez мне как раз это и приходило в голову. Переделал $P{CHECK_DATE} Код: java 1. Теперь ошибка ... Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=END-OF-STATEMENT; ;), DRIVER=3.62.56 ... P.S. если вдруг тему прочитают спецы по JR - хотелось бы знать правильно ли я понял логику работы JR: 1) инициализируются (и вычисляются?) параметры которые записаны как $P{} (здесь я не имею доступа к переменным и полям) 2) вместо параметров $P!{} подставляется результат их вычисления (здесь я не могу напрямую воспользоваться параметрами вида $P{} потому что они подставятся в sql как-есть и тогда я получу ошибку "Нераспознанное ключевое слово в условии ESCAPE") 3) параметры вставляются в sql. (и тут) 4) возвращается результат 5) формируется отчет (здесь я уже имею доступ к переменным и полям) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2012, 10:53 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
andrejjj, Вы можете отключить выполнение вашего запроса и просто вывести в отчете в TextField параметр ${P_CHECK_DATE} ? Или весь запрос, каким он у вас получается. А потом выполнить просто запрос с использованием получившейся строки. Меня смущает: SQLERRMC=END-OF-STATEMENT; ;) Закрывающее что-то лишнее пишете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2012, 12:41 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
Самое смешное, что по отдельности все работает сделал три параметра String --> xlam1 --> Код: java 1. String --> xlam2 --> Код: java 1. String --> CHECK_D --> Код: java 1. кинул xlam2 в заголовок отчета запустил с $P{ALL_DAYS} = 1, получил такую картинку (прилагается запустил с $P{ALL_DAYS} = 0, получил такую ошибку Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=20;R.STARTDATE AS DATE);<space>, DRIVER=3.62.56 *пичалька ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2012, 15:20 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
andrejjj, Итого: один вариант работает (==1), строку запроса вы видите. Нужно отладить второй (==0). Кидаем xlam1 в Title, ставим на банд Detail (точнее на все кроме Title) PrintWhenExpression = false Запускаем с параметром == 0 и проверяем строку запроса. В чем проблемы то? Или я чего-то не понял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2012, 16:14 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
Я уже и сам не понимаю, что происходит я приложил файлик, это снимок экрана с работающего отчета. На нем хлам2 выкинут на титл и вроде строка нужная генерируется а вот когда этот до....ный хлам2 стоит в тернарном операторе вылазит ошибка Я уже и строку на несколько кусков разбивал и в нетбинсе этот кусок тестировал - ничего не пойму. у меня есть другой параметр вот такой String --> Код: java 1. все работает нормально а здесь Код: java 1. кроется какая то бяка и именно когда это выражение стоит в тернарном ветке иначе (ща попробую в если) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2012, 16:44 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
andrejjj, Не понял. Не xlam2 надо проверять здесь а хlam1 У вас же на нем ломается. Киньте его в Title. Кто-то из нас запутался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2012, 17:12 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
положил в титл оба хлама )))) запустил отчет с параметром $P{ALL_DAYS} == 1 (потому что если = 0 , валится с ошибкой) рисунок прилагаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2012, 17:22 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
andrejjj, Я совсем не знаю db2, но вопрос: перед "20 DAY" плюс не нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2012, 17:32 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
да ужжж (((( посыпаю голову пеплом, добавил этот злосчастный плюс теперь ошибка полезла дальше Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=END-OF-STATEMENT;DAYOFCALCULATION ASC;), DRIVER=3.62.56 это идет ругань на следующие строки в sql запросе, а если в sql запросе выкинуть все что стоит после этого параметра получаю ошибку Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=END-OF-STATEMENT;ODE AS INTEGER)= 219;), DRIVER=3.62.56 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2012, 17:49 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
andrejjj, Эта удаленная отладка - дело непродуктивное. Отдохните, попейте кофе и не спеша проходите по сообщениям стектрейса. Все что возникало у вас там прекрасно описано. Не торопитесь, аккуратненько и все у вас получится. Например из последнего поста видно что забыт order by наверно: END-OF-STATEMENT;DAYOFCALCULATION ASC; и так далее. Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2012, 18:06 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за внимание, задача решилась. Ларчик как обычно открывался просто ((( в выражении для xlam2 была забыта закрывающая скобка правильно было так Код: java 1. Сейчас попробую убрать лишние cast, я думаю и без них всё будет работать Отчет сформировался нормально Есть правда одно но: компиляция проходит без ошибок, но когда захожу в "Report query" и нажимаю "Read fields" получаю ошибку: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 10:06 |
|
||
|
iReport и использование переменных в запросе
|
|||
|---|---|---|---|
|
#18+
Еще раз всем спасибо, отдельная благодарность sanBez за участие и ценные замечания. Тему можно закрывать. P.S. оказывается ошибка которую я выше показал это не баг, это фича :D объяснение здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2012, 10:27 |
|
||
|
|

start [/forum/topic.php?fid=31&fpage=45&tid=1534505]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
| others: | 256ms |
| total: | 396ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...