Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> формирование отчета ireport, с парам-ми из JTextField 
V
    Опции темы
izver84
Дата 24.2.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: 1
Всего: 1



Есть отчет созданный ireport которой отображает документы. 
В проге есть 2 компанента  JTextField и одна кнопка. Если нажать на кнопку, формируется отчет (запрос
Код

<queryString><![CDATA[SELECT
     jrbp."datbp" AS datbp,
     jrbp."kvod" AS kvod,
     jrbp."nd" AS nd,
     jrbp."pr_annul" AS pr_annul,
     jrbp."sumo" AS sumo,
     jrbp."sumv" AS sumv,
     jrbp."sumd" AS sumd,
     s101."adpot" AS adpot,
     s101."npot" AS snpot,
     s215."fk" AS fk,
     vodil."kvod" AS vkvod,
     vodil."nvod" AS nvod,
     jrbp."kpot" AS jkpot,
     s101."kpot" AS kpot,
     s101."kpl" AS skpl,
     s215."kpl" AS kpl
FROM
     "public"."s101" s101 INNER JOIN "public"."jrbp" jrbp ON s101."kpot" = jrbp."kpot"
     INNER JOIN "public"."vodil" vodil ON jrbp."kvod" = vodil."kvod"
     INNER JOIN "public"."s215" s215 ON s101."kpl" = s215."kpl"  where  jrbp."pr_annul"=0]]></queryString>
 )



класс connection
Код

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;


public class DBConnector {
    public Connection connection; 
    public static Connection getConnection() {
        // TODO Автоматически созданная заглушка метода
        //return null;
        Connection connection = null;

        if (connection != null) {
        return connection;
        }
        Driver d;
        try{
        //    Class.forName(”org.gjt.mm.mysql.Driver”).newInstance()
            d = (Driver)Class.forName("org.postgresql.Driver").newInstance();
        }
        catch (Exception e) {
            System.out.println("Error 1");
            System.out.println(e.getStackTrace());
        }
        try{
            connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/bon", "postgres", "syrus");
        
        }
        catch(SQLException e)
        {
            System.out.println(e.getMessage());
        }
        return connection;
    }
    

    
//------------------------------------------------------
}




База постгрес.

Собственно вопрос:
Как сделать  такую штуку?

Пользователь водит в текстфилды диапазон документов.   Нажимает на кнопку и формируется отчет только для этого диапозона.
Отчет отображается в JRViewer

Код

private JRViewer getJRViewer() {
        if (JRViewer == null) {
            try {
            JRViewer = new JRViewer("bon1.jrprint",false);
            } catch (JRException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            JRViewer.setName("JRViewer");
            
        }
        return JRViewer;


Заранее спасибо.

Это сообщение отредактировал(а) izver84 - 24.2.2009, 17:57


--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
jeank
Дата 24.2.2009, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 26.6.2008
Где: Калининград

Репутация: 1
Всего: 1



Нда, моло того, что Вам лень мозгами пораскинуть, как подправить запрос, так еще толком объяснить не смогли. В частности, "диапазон документов" - это че вообще? Правильнее сказать подмножество документов по какому то критерию  - про критерий ничего не сказано, ну да фиг с ним. Собственно, надо добавить дополнительный INNER JOIN, если придерживаться данного синтаксиса, хотя все внутренние объединения множеств в читабельном sql описываются ключевым словом WHERE  и далее пошли приравнивания. Может, конечно, я не въехал в поставленную проблему...
PM MAIL WWW   Вверх
izver84
Дата 25.2.2009, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: 1
Всего: 1



Исправляюсь.
В ireport создал отчет. Данные в поля берутся из базы. По умолчанию работает этот селект(прописан в отчете)
 
Код

<queryString><![CDATA[SELECT
     jrbp."datbp" AS datbp,
     jrbp."kvod" AS kvod,
     jrbp."nd" AS nd,
     jrbp."pr_annul" AS pr_annul,
     jrbp."sumo" AS sumo,
     jrbp."sumv" AS sumv,
     jrbp."sumd" AS sumd,
     s101."adpot" AS adpot,
     s101."npot" AS snpot,
     s215."fk" AS fk,
     vodil."kvod" AS vkvod,
     vodil."nvod" AS nvod,
     jrbp."kpot" AS jkpot,
     s101."kpot" AS kpot,
     s101."kpl" AS skpl,
     s215."kpl" AS kpl
FROM
     "public"."s101" s101 INNER JOIN "public"."jrbp" jrbp ON s101."kpot" = jrbp."kpot"
     INNER JOIN "public"."vodil" vodil ON jrbp."kvod" = vodil."kvod"
     INNER JOIN "public"."s215" s215 ON s101."kpl" = s215."kpl"  where  jrbp."pr_annul"=0]]></queryString>


Запускаю в ireport отчет через JRViewer. Сохраняю как *.jrprint. Копирую  созданный файл в папку с проектом. 
В проекте есть прога - JFrame. На нём находиться JSplitPane
Код

    jSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
 

Слева находиться 2 компонента  JTextField и одна кнопка, справа JRViewer (отображающий*.jrprint). 

Вопрос следующий:

Пользователь водит в текстфилды приделы возможных значий поля jrbp.nbp. 
Запрос имеет вид.
Код

SELECT
     jrbp."datbp" AS datbp,
     jrbp."kvod" AS kvod,
     jrbp."nd" AS nd,
     jrbp."pr_annul" AS pr_annul,
     jrbp."sumo" AS sumo,
     jrbp."sumv" AS sumv,
     jrbp."sumd" AS sumd,
     s101."adpot" AS adpot,
     s101."npot" AS snpot,
     s215."fk" AS fk,
     vodil."kvod" AS vkvod,
     vodil."nvod" AS nvod,
     jrbp."kpot" AS jkpot,
     s101."kpot" AS kpot,
     s101."kpl" AS skpl,
     s215."kpl" AS kpl
FROM
     "public"."s101" s101 INNER JOIN "public"."jrbp" jrbp ON s101."kpot" = jrbp."kpot"
     INNER JOIN "public"."vodil" vodil ON jrbp."kvod" = vodil."kvod"
     INNER JOIN "public"."s215" s215 ON s101."kpl" = s215."kpl"  where  jrbp."pr_annul"=0 and between(jrbp.nbp,"значение 1 текстфилда","значение 2 текстфилда")


Генерируется отчет используя новый запрос. JRViewer отображает уже измененный отчет.

Как связать новый запрос с отчетом?



--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
jeank
Дата 26.2.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 26.6.2008
Где: Калининград

Репутация: 1
Всего: 1



Ну вопрос, как я понял - как передать параметры из формы, в которую лупит пользователь в запрос, который в отчете.

Код

HashMap parameterMap = new HashMap();
    parameterMap.put("DT1", dt1);
    parameterMap.put("DT2", dt2);
    parameterMap.put("SB", simb);
                 
     JasperReport jasperReport = JasperCompileManager.compileReport("reports/kss1.jrxml");
     JasperPrint jasperPrintData = JasperFillManager.fillReport(jasperReport, parameterMap, db.getConnection());


Собственно, нужна последняя строчка, где помимо соединения можно передать параметры в виде HashMap, далее эти параметры можно использовать в отчете наполную.
PM MAIL WWW   Вверх
skif18
Дата 21.4.2009, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

Репутация: 1
Всего: 1



jeank, на функцию compileReport  дает ошибку 

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester
    at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:150)



--------------------

PM MAIL ICQ   Вверх
izver84
Дата 4.5.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: 1
Всего: 1



решил

код работы с репортом
Код

    HashMap parameters = new HashMap();
                    int valfnum = Integer.parseInt(jTextField.getText());

                    parameters.put("fnum",valfnum);
                    int valfnut = Integer.parseInt(jTextField1.getText());
                    parameters.put("fcon",valfnut);
                    
                    try {
                        JasperDesign jasperDesign = JRXmlLoader.load("bon1.jrxml");
                        JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);

                      Connection conn = DBConnector.getConnection(); 

                         
                       JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,parameters, conn);


                       JasperViewer.viewReport(jasperPrint,false);
                } catch (JRException ejr) {
  
                        ejr.printStackTrace();

                }
                    
                    


где valfnum и valfnut - значения jTextField.



--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
Viktorr
Дата 12.5.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.4.2008

Репутация: нет
Всего: нет



С тем, как отправить параметры в JasperReport  все ясно, хотелось бы еще узнать как их принять.
А именно интересует отрывок xml файла, где описывается как эти valfnum и valfnut показать пользователю в отчете.
Заранее спасибо.
PM MAIL   Вверх
izver84
Дата 12.5.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 5.11.2007

Репутация: 1
Всего: 1



Код

<parameter name="fnum" isForPrompting="true" class="java.lang.Integer"/>
<parameter name="fcon" isForPrompting="true" class="java.lang.Integer"/>
<queryString><![CDATA[SELECT
 *
FROM
    table
WHERE
  column1>= $P{fnum}
 AND column2<= $P{fcon}]]></queryString>



где $P{fnum}=valfnum и $P{fcon}=valfnut
 

Это сообщение отредактировал(а) izver84 - 12.5.2009, 14:45


--------------------
Если новая программа с первого раза компилируется без ошибок, значит, она написана принципиально неправильно. 
PM MAIL   Вверх
Viktorr
Дата 12.5.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 24.4.2008

Репутация: нет
Всего: нет



Огромное спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0775 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.