[RESOLVIDO] SubRelatório no iReport

21 respostas
K

Boa Noite Galera…!

Estou desesperadaaaaa… Estou com um problema no desenvolvimento do meu TCC…

Alguem poderia por misericórdia me ajudar a montar um subrelatorio do iReport e depois a passar isso para o Netbeans?

É o seguinte: tenho uma classe de professores, e tenho opinioes desses professores. Pode ter duas ou mais opinioes de cada professor…

No principal terei os dados do professor e no sub essas opinioes.

Já fiz o principal… e o sub, mas na hora de juntá-los ele reclama da variável de ligação entre esses dois relatorios… aaaaaaaaaaaaahhhh… Socoooooorroooooooo…

Agradeço desde já a atencao de vcs…

Bjoooo…

21 Respostas

R

Ola, teria o codigo de como está sendo implementado o seu relatorio para ter uma ideia?

Qual o erro que está sendo gerado? Você esta passando corretamente o caminho do seu subRelatório?

Você está utilizando collection ou query para gerar o relatorio?

Tente especificar melhor oque está ocorrendo, se puder, coloque o codigo que contem o problema e tb os jrxml do relatorio.

Abraço.

K

rdmardegam, Vou tentar ser mais clara…

é o seguinte:

Tenho o relatorio A principal, certo que mostra o nome do professor somente…

Criei um outro relatório B sem título, só com dados, e coloquei o campo de opinião do professor… só aparece a opniao do professor…

Lembrando que os dois relatórios acima estão funcionando…

Aí chega o meu dilema…

Coloquei um ícone de subrelatório, só que eu não sei como fazer aquelas configurações…

Então coloco o que eu sei e monto o relatorio B dentro do relatorio A, porém qdo eu rodo, ele abre uma janelinha reclamando uma variável que eu não sei o que é: SUBREPORT_DIR com espaço pra digitar…

Porém executa direitinho mas sem filtrar a opinião do professor.

Por exemplo: Tenho o professor ZXY com duas opiniões e o professor XPTO com 3 opiniões…

Qdo executo pararece o professor ZXY com todas as 5 opinioes e o professor XPTo com as mesmas 5 opinioes…

Eu já perquisei tudos os lugares possíveis e não encontrei nada que me ajudasse…

Help me pleeeeease!!!

R

Certo, vc está exportando para pdf?
Tem como colocar o codigo e o jrxml para facilitar?

Como n sei como está sua estrutura de exportacao, vou montar meio que uma que pensei aqui exemplo.

Você vai ter a classe Professor e a classe Opniao.
Onde a class Professor possui uma colecao da classe opiniao certo.

Entao o relatorio principal vai percorrer a colecao dos professores e o subRelatorio vai percorrer a colecao das opinioes dos professores.

Enfim esse SUBREPORT_DIR é o seguinte, existe seu relatorio principal certo, chamaremos ele de A.jasper
E tem o seu subRelatorio, chamaremos de B.jasper.

Esse SUBREPORT_DIR seria o diretorio que se encontra o B.jasper, se ele estiver no diretorio “c:\Relatorios” vc deve passar a informacao “c:\Relatorios” para que o relatorio principal “A.jasper” saiba onde encontrar o seu subrelatorio.

Enfim, é meio complicado de explicar e to correndo aqui agora hehe, manda seu codigo e os jrxml que fica mais facil de ver onde vc está errando.

Se voce disse q ja ta gerando os relatorios so n atualiza as inforacoes deve ser coisa simples

Abraço.

K

rdmardegam, olha o código aí....

[color=blue]Me ajude por favor....

Eu não estou exportando para pdf não....

O SUBREPORT_DIR está como endereço direitinho.... num é iso não!![/color]

RelRestrições.jrxml (esse é o relatório A)
<?xml version="1.0" encoding="UTF-8"  ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
		 name="RelRestricoes"
		 columnCount="1"
		 printOrder="Vertical"
		 orientation="Portrait"
		 pageWidth="595"
		 pageHeight="842"
		 columnWidth="535"
		 columnSpacing="0"
		 leftMargin="30"
		 rightMargin="30"
		 topMargin="20"
		 bottomMargin="20"
		 whenNoDataType="NoPages"
		 isTitleNewPage="false"
		 isSummaryNewPage="false">
	<property name="ireport.scriptlethandling" value="0" />
	<property name="ireport.encoding" value="UTF-8" />
	<import value="java.util.*" />
	<import value="net.sf.jasperreports.engine.*" />
	<import value="net.sf.jasperreports.engine.data.*" />

	<parameter name="SUBREPORT_DIR" isForPrompting="true" class="java.lang.String">
		<defaultValueExpression ><![CDATA["C:\\Users\\cliente\\Documents\\NetBeansProjects\\SCIHE\\relatorios\\"]]></defaultValueExpression>
	</parameter>
	<parameter name="cdprofessor" isForPrompting="false" class="java.lang.Integer">
		<defaultValueExpression ><![CDATA[$F{cdprofessor}]]></defaultValueExpression>
	</parameter>
	<queryString><![CDATA[SELECT p.cdprofessor, status, nmprofessor, sgcurso, nmcurso, motivo, date_format(dshora, '%h:%i'),  nmdia 
FROM tbprofessor p, tbcurso c, tbrestricao r, tbhora h, tbdia d 
WHERE status = 'true'
AND p.cdcurso = c.cdcurso
AND r.diasemana = d.cddia
AND r.horario = h.cdhora
AND p.cdprofessor = r.cdprofessor
ORDER BY nmprofessor, nmdia, dshora]]></queryString>

	<field name="cdprofessor" class="java.lang.Integer"/>
	<field name="status" class="java.lang.String"/>
	<field name="nmprofessor" class="java.lang.String"/>
	<field name="sgcurso" class="java.lang.String"/>
	<field name="nmcurso" class="java.lang.String"/>
	<field name="motivo" class="java.lang.String"/>
	<field name="date_format(dshora, '%h:%i')" class="java.lang.String"/>
	<field name="nmdia" class="java.lang.String"/>

		<background>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</background>
		<title>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</title>
		<pageHeader>
			<band height="91"  isSplitAllowed="true" >
				<line direction="TopDown">
					<reportElement
						x="0"
						y="90"
						width="536"
						height="0"
						key="line-1"/>
					<graphicElement stretchType="NoStretch"/>
				</line>
				<image  evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
					<reportElement
						x="6"
						y="4"
						width="52"
						height="41"
						key="image-1"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<graphicElement stretchType="NoStretch"/>
					<imageExpression class="java.lang.String"><![CDATA["C:\\Users\\cliente\\Documents\\NetBeansProjects\\Imagens\\Logo.jpg"]]></imageExpression>
				</image>
				<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
					<reportElement
						x="6"
						y="50"
						width="525"
						height="35"
						key="textField-1"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement textAlignment="Center" verticalAlignment="Middle">
						<font fontName="Verdana" size="14"/>
					</textElement>
				<textFieldExpression   class="java.lang.String"><![CDATA["Restrições - "+$F{nmcurso}]]></textFieldExpression>
				</textField>
			</band>
		</pageHeader>
		<columnHeader>
			<band height="30"  isSplitAllowed="true" >
				<staticText>
					<reportElement
						x="7"
						y="6"
						width="181"
						height="19"
						key="staticText-2"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement textAlignment="Left">
						<font fontName="Verdana" pdfFontName="Helvetica-Bold" size="12" isBold="true"/>
					</textElement>
				<text><![CDATA[Professor]]></text>
				</staticText>
				<staticText>
					<reportElement
						x="193"
						y="6"
						width="172"
						height="19"
						key="staticText-3"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement textAlignment="Left">
						<font fontName="Verdana" pdfFontName="Helvetica-Bold" size="12" isBold="true"/>
					</textElement>
				<text><![CDATA[Restrições]]></text>
				</staticText>
				<staticText>
					<reportElement
						x="368"
						y="6"
						width="98"
						height="19"
						key="staticText-4"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement textAlignment="Left">
						<font fontName="Verdana" pdfFontName="Helvetica-Bold" size="12" isBold="true"/>
					</textElement>
				<text><![CDATA[Dia]]></text>
				</staticText>
				<staticText>
					<reportElement
						x="469"
						y="6"
						width="60"
						height="19"
						key="staticText-6"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement textAlignment="Left">
						<font fontName="Verdana" pdfFontName="Helvetica-Bold" size="12" isBold="true"/>
					</textElement>
				<text><![CDATA[Horário]]></text>
				</staticText>
			</band>
		</columnHeader>
		<detail>
			<band height="50"  isSplitAllowed="true" >
				<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
					<reportElement
						x="7"
						y="5"
						width="181"
						height="18"
						key="textField"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement>
						<font fontName="Verdana" size="12"/>
					</textElement>
				<textFieldExpression   class="java.lang.String"><![CDATA[$F{nmprofessor}]]></textFieldExpression>
				</textField>
				<subreport  isUsingCache="true">
					<reportElement
						x="183"
						y="7"
						width="346"
						height="39"
						key="subreport-1"/>
					<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
					<subreportExpression  class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "subRelRestricoes.jasper"]]></subreportExpression>
				</subreport>
			</band>
		</detail>
		<columnFooter>
			<band height="28"  isSplitAllowed="true" >
				<staticText>
					<reportElement
						x="474"
						y="7"
						width="24"
						height="17"
						key="staticText-5"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement>
						<font/>
					</textElement>
				<text><![CDATA[pág.]]></text>
				</staticText>
				<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
					<reportElement
						x="501"
						y="7"
						width="26"
						height="18"
						key="textField"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement>
						<font/>
					</textElement>
				<textFieldExpression   class="java.lang.Integer"><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
				</textField>
				<line direction="TopDown">
					<reportElement
						x="2"
						y="2"
						width="536"
						height="0"
						key="line-2"/>
					<graphicElement stretchType="NoStretch"/>
				</line>
			</band>
		</columnFooter>
		<pageFooter>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</pageFooter>
		<summary>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</summary>
</jasperReport>

subRelRestrições.jrxml (esse é o relatório B)

<?xml version="1.0" encoding="UTF-8"  ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
		 name="subRelRestricoes"
		 columnCount="1"
		 printOrder="Vertical"
		 orientation="Portrait"
		 pageWidth="595"
		 pageHeight="842"
		 columnWidth="535"
		 columnSpacing="0"
		 leftMargin="30"
		 rightMargin="30"
		 topMargin="20"
		 bottomMargin="20"
		 whenNoDataType="NoPages"
		 isTitleNewPage="false"
		 isSummaryNewPage="false">
	<property name="ireport.scriptlethandling" value="0" />
	<property name="ireport.encoding" value="UTF-8" />
	<import value="java.util.*" />
	<import value="net.sf.jasperreports.engine.*" />
	<import value="net.sf.jasperreports.engine.data.*" />

	<queryString><![CDATA[SELECT p.cdprofessor, status, nmprofessor, sgcurso, nmcurso, motivo, date_format(dshora, '%h:%i'),  nmdia 
FROM tbprofessor p, tbcurso c, tbrestricao r, tbhora h, tbdia d 
WHERE status = 'true'
AND p.cdcurso = c.cdcurso
AND r.diasemana = d.cddia
AND r.horario = h.cdhora
AND p.cdprofessor = r.cdprofessor
ORDER BY nmprofessor, nmdia, dshora]]></queryString>

	<field name="cdprofessor" class="java.lang.Integer"/>
	<field name="status" class="java.lang.String"/>
	<field name="nmprofessor" class="java.lang.String"/>
	<field name="sgcurso" class="java.lang.String"/>
	<field name="nmcurso" class="java.lang.String"/>
	<field name="motivo" class="java.lang.String"/>
	<field name="date_format(dshora, '%h:%i')" class="java.lang.String"/>
	<field name="nmdia" class="java.lang.String"/>

		<background>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</background>
		<title>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</title>
		<pageHeader>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</pageHeader>
		<columnHeader>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</columnHeader>
		<detail>
			<band height="50"  isSplitAllowed="true" >
				<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
					<reportElement
						x="4"
						y="3"
						width="169"
						height="44"
						key="textField-1"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement>
						<font fontName="Verdana" size="12"/>
					</textElement>
				<textFieldExpression   class="java.lang.String"><![CDATA[$F{motivo}]]></textFieldExpression>
				</textField>
				<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
					<reportElement
						x="175"
						y="3"
						width="97"
						height="18"
						key="textField-2"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement>
						<font fontName="Verdana" size="12"/>
					</textElement>
				<textFieldExpression   class="java.lang.String"><![CDATA[$F{nmdia}]]></textFieldExpression>
				</textField>
				<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None"  hyperlinkTarget="Self" >
					<reportElement
						x="274"
						y="3"
						width="62"
						height="18"
						key="textField-3"/>
					<box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/>
					<textElement textAlignment="Justified">
						<font fontName="Verdana" size="12"/>
					</textElement>
				<textFieldExpression   class="java.lang.String"><![CDATA[$F{date_format(dshora, '%h:%i')} + "h"]]></textFieldExpression>
				</textField>
			</band>
		</detail>
		<columnFooter>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</columnFooter>
		<pageFooter>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</pageFooter>
		<summary>
			<band height="0"  isSplitAllowed="true" >
			</band>
		</summary>
</jasperReport>

:arrow: :arrow: :arrow:

Acho que seria interessante eu te enviar por email o código jarper....

Eu vou dar um jeito aqui de te enviar...

rdmardegam, eu já te agradeço muito pela sua atenção viu!!!

[color=red]Bjoooo...[/color]

A

Acabei de ver o seu tópico e dei uma olhada no relatório e subrelatório que vc criou…

eu obsevei que as duas queries são identicas… eu sugiro que tente dividir elas…com a query do relatório trazendo informações que serão exibidas no relatório e query do subrelatório trazendo informações que serão exibidas no subrelatório…e acho que vc deve fazer um “join” usando no seu caso acho que a coluna codProfessor.

vou tentar demonstrar abaixo com suas queries a idéia…(não é a solução eh apenas um idéia teórica de como seria)
abaixo query do relatório

SELECT p.cdprofessor, nmprofessor, nmcurso FROM tbprofessor p, tbcurso c, tbrestricao r, tbhora h, tbdia d WHERE status = 'true' AND p.cdcurso = c.cdcurso AND r.diasemana = d.cddia AND r.horario = h.cdhora AND p.cdprofessor = r.cdprofessor ORDER BY nmprofessor, nmdia, dshora

agora usando o ireport, dentro do relatório click com o botão direito no subrelatório e click em properties vá até a guia Subreport(other) e click no botão add, na janelinha que abre coloque no primeiro campo o seguinte parametro_cdprofessor e no segundo campo o nome do campo cdProfessor (pode mudar dependendo da sua necessidade) que no caso eh $F{cdprofessor}.

no subrelatório vc deve criar o parametro_cdprofessor (ele receberá o código do professor para executar a query do subrelatório).

no subrelatório a query ficaria parecida com a query abaixo

SELECT status, sgcurso, motivo, date_format(dshora, '%h:%i'), nmdia FROM tbprofessor p, tbcurso c, tbrestricao r, tbhora h, tbdia d WHERE p.cdprofessor = $P{parametro_cdprofessor} AND status = 'true' AND p.cdcurso = c.cdcurso AND r.diasemana = d.cddia AND r.horario = h.cdhora AND p.cdprofessor = r.cdprofessor ORDER BY nmprofessor, nmdia, dshora

Acabou ficando um descrição um pouco longa e como eu não conheço a base de dados fica um pouco dificil para eu descrever melhor.
Minha intenção era trazer uma idéia de como seria, eu trabalho com o ireport a pouco tempo, abaixo vou deixar um link onde vc poderá baixar videos aulas que são as mesmas que eu usei para aprender…

http://boesing.blogspot.com/2009/09/video-aulas-jasperreportsireport.html

espero ter podido ajudar de alguma forma espero que o rdmardegam ou algum outro membro possam ajudar ainda mais

K

[color=red]arqueiros, Bom Dia!!![/color]

Consegui fazer o que vc me disse, tbm simplifiquei o meu sql do relatório principal.
[color=green]
Muito obrigada!!![/color]

Era exatemente o que eu precisava…

Vou estudar as video aulas que vc me passou para eu ficar craque nesse ireport… risos…

O [color=red]rdmardegam[/color], vai me ajudar a fazer esse mesmo relatório de outra forma…

Agradeço a todos que me ajudaram… vou passar para o meu próximo relatorio… risos… que acredito que ficará bem mais fácil agora…

[color=violet] Bjooo*[/color]

K

Olá para todos....

Bem eu continuo com um problema...

No Ireport eu já resolvi com a ajuda de meus colegas acima, porém no netbeans o trem tá feio!!!

Eu não sei fazer o código que referencia o sub não:

Olhem meu código:

package Relatorios;

import Banco.Conexão;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class RelRestricoes{

    
    Conexão conm = new Conexão();


public RelRestricoes() {
  try 
  {
      conm.conecta();
      conm.executeSelecao("SELECT DISTINCT (p.cdprofessor), status, nmprofessor, sgcurso, nmcurso FROM tbprofessor p, tbcurso c, tbrestricao r WHERE status = 'true' AND p.cdcurso = c.cdcurso AND p.cdprofessor = r.cdprofessor ORDER BY nmprofessor");
      JRResultSetDataSource jrRS = new JRResultSetDataSource(conm.resultset);
      JasperPrint jasperPrint = JasperFillManager.fillReport(
      "Relatorios/RelRestricoes.jasper", new HashMap(), jrRS);
      JasperViewer.viewReport(jasperPrint);
  } catch (Exception erro){
             JOptionPane.showMessageDialog(null,"deu erro ="+erro);
   }
}

  public static void main (String args[]) 
  {
    new RelRestricoes(); 
  }
}

Me ajudem... por favor...

[color=red]Bjooo*[/color]

K

[color=violet][b]Boa Noite pessoal!!![/color]

[color=green]Eu continuo com o meu problema…[/color]

[color=darkred]Como eu havia falado eu consigo rodar no ireport, porém no netbeans qdo eu peço para rodar o relatorio ele gera um erro em que o sub nao está preenchido… já rodei vários post aqui do guj, já consultei o pai google e nada…[/color]

[color=blue]Gte me ajuda aí por favor…

Me falem aonde que eu dormi no ponto…

Agradeço muito a atenção de vcs…[/color][/b]

[color=red]Bjoooo*[/color]

F

O erro está nessa linha de código:

JasperPrint jasperPrint = JasperFillManager.fillReport(
      "Relatorios/RelRestricoes.jasper", new HashMap(), jrRS);

Se vc observar bem vc está lançando um new HashMap() para esse subrelatório. Um subrelatório necessita do parâmentro e vc passa esse parâmetro pelo HashMap.

Faça dessa forma:

// Aqui vc cria o HashMap a partir da Interface Map e passa uma String
// referente ao nome do parâmetro e o objeto referente ao parâmetro
// seja ele Integer,String, Long, ou qualquer outro tipo de objeto
Map<String, OBJETO_REFERENTE_AO_PARAMETRO> parametros = new HashMap<String, OBJETO_REFERENTE_AO_PARAMETRO>();

// Aqui vc passa o parâmetro. A cada put vc pode passar um parâmetro diferente
parametros.put(<nome_do_parametro>, <valor_do_parametro>);

//Aqui vc descomprime o arquivo .jasper e gera um arquivo .jrprint
JasperFillManager.fillReportToFile("Relatorios\\RelRestricoes.jasper", parametros, jrRS);

// Aqui vc visualiza o relatório em um JFrame pelo JasperViewer
JasperViewer.viewReport("Relatorios\\RelRestricoes.jrprint",false, false);

Fim :slight_smile:

Vc tem que preencher o parâmetro para que o subrelatório seja executado corretamente
Se não acontece o que vc está passando agora

Espero ter ajudado :slight_smile:

K

f4binho, Boa Tarde!!!

Eu tentei implementar isso que vc me falou:

package Relatorios;

import Banco.Conexão;
import java.lang.Object;
import java.util.HashMap;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class RelRestricoes{

    
    Conexão conm = new Conexão();


public RelRestricoes() {
  try 
  {
      conm.conecta();
      conm.executeSelecao("SELECT DISTINCT (p.cdprofessor) AS cdprofessor, status, nmprofessor, sgcurso, nmcurso FROM tbprofessor p, tbcurso c, tbrestricao r WHERE status = 'true' AND p.cdcurso = c.cdcurso AND p.cdprofessor = r.cdprofessor ORDER BY nmprofessor");
      JRResultSetDataSource jrRS = new JRResultSetDataSource(conm.resultset);
      HashMap <Object,Object> par = new HashMap<Object,Object>();
      //conm.resultset.first();
      //JOptionPane.showMessageDialog(null, conm.resultset.getInt("cdprofessor"));
      par.put("parametro_cdprofessor", "cdprofessor");
      JasperPrint jasperPrint = JasperFillManager.fillReport(
      "Relatorios/RelRestricoes.jasper", par, jrRS);
      JasperViewer.viewReport(jasperPrint);
  } catch (Exception erro){
             JOptionPane.showMessageDialog(null,"deu erro ="+erro);
   }
}

  public static void main (String args[]) 
  {
    new RelRestricoes(); 
  }
}

Mas ele continua rodando e reclamando de que os parametros nao esão sendo preenchidos....

O que eu estou fazendo de errado?

O único parametro que eu passo do relRestrições para o subRelRestrições é o cdprofessor, que eu criei um parametro dentro do subRelRestrições chamado parametro_cdprofessor, eu até coloquei no meu codigo acima...

Eu não sei mais o que fazer... já fiz vários testes e nada, roda o relatorio principal e o outro nada....

Aaaaaaaaaaaaaaaaaaaaahhh..... socorrooooooooooooooooooooooo......

F

Qual é a mensagem que ele dá? posta aqui

F

Observe bem o que eu descrevi lá em cima, vou tentar ajudar:

Map <String,Integer> par = new HashMap<String,Integer>();
      
par.put("cdprofessor", 1);

Explicação:

Eu aqui criei um HashMap pela interface Map que recebe uma String e um Integer. Por que? A String que coloquei no começo é o nome do parâmetro do seu .jasper - ou seja “cdprofessor”.

Em segunda parte eu coloquei uma Integer, pois seu código professor é uma Integer. E assim eu determino qual o codprofessor eu devo selecionar.

Primeiro eu dou o nome do parâmetro - "cdprofessor"
Segundo eu informo o valor do parâmetro - 1

Isso deve resolver sua solução e, se caso contrário, der erro informe o código de erro

K

[color=blue][b]f4binho,

continua dando erro:[/b][/color]

init:
deps-jar:
compile-single:
run-single:
0 [subRelRestricoes subreport filler] WARN query.JRJdbcQueryExecuter  - The supplied java.sql.Connection object is null.
31 [subRelRestricoes subreport filler] WARN query.JRJdbcQueryExecuter  - The supplied java.sql.Connection object is null.
31 [subRelRestricoes subreport filler] WARN query.JRJdbcQueryExecuter  - The supplied java.sql.Connection object is null.
47 [subRelRestricoes subreport filler] WARN query.JRJdbcQueryExecuter  - The supplied java.sql.Connection object is null.
BUILD SUCCESSFUL (total time: 3 minutes 15 seconds)

[color=green][b]Lembrando que nesse meu relatorio, 4 professores tem restrições…

Qdo eu rodo, o relatorio principal roda direitinho, mas não traz os dados do sub e mostra o erro acima.

No iReport esse relatório roda filé demais!!

Se vc puder me ajudar novamente…[/b][/color]

[color=violet]
Obrigada!
[/color]

[color=red]
Beijo*[/color]

F

Vc colocou corretamente o driver do JDBC no classpath?

K

Uai, f4binho!!!

Acho que sim…

Como eu faço isso?

F

Posta seu código da classe de Conexão :slight_smile:

:roll:

K

[color=green]f4binho, eu vou postar meu codigo.

Mas antes de postar, talvez vc consiga me ajudar…

Quando eu clico no botão de fechar do meu relatorio, ele fecha o sistema todo… tenho que rodar o sistema, logar e tal… o que pode ser?[/color]

[color=red]Obrigada!

Daqui a pouco qu posto o meu código![/color]

K

Meu codigo de conexao:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Banco;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
/**
 *
 * @author cliente
 */
public class Conexão {
    private Connection conexao;
    DefaultTableModel modelo;
    public Statement statement;
    public ResultSet resultset;  
    
    public boolean conecta(){
        boolean result = true;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            conexao = DriverManager.getConnection("jdbc:mysql://127.0.0.1/scihe?user=root&password=");
            //JOptionPane.showMessageDialog(null, "Conexão realizada com sucesso!");
        }
        catch(ClassNotFoundException ex){
          //  JOptionPane.showMessageDialog(null, "Não foi possível carregar o drive!");
            ex.printStackTrace();
            result = false;
        }
        catch(SQLException sqlEx){
           // JOptionPane.showMessageDialog(null, "Conexão com o banco falhou!");
            sqlEx.printStackTrace();
            result = false;
        }
        return result;
    }
    public boolean desconecta(){
        boolean result = true;
        try 
        {
            conexao.close();
            //JOptionPane.showMessageDialog(null,"Banco Desconectado com sucesso!");
        }
        catch(SQLException sqlEx) 
        {
            //JOptionPane.showMessageDialog(null,"Não foi possivel desconectar!");
            sqlEx.printStackTrace();
            result = false;
        }
        return result;    
    }
    public boolean executeSQL(String sql){
        boolean result = true;
        try 
        {
            statement = conexao.createStatement();
            statement.executeUpdate(sql);
           // JOptionPane.showMessageDialog(null,"SQL executada com sucesso!");
        }
        catch(SQLException sqlEx) 
        {
        //   JOptionPane.showMessageDialog(null,"Não foi possível "+
        //           "executar o comando sql,"+sqlEx+", o sql passado foi "+sql);
           sqlEx.printStackTrace();
           result = false;
        }
        return result;
    }
    public boolean executeSelecao(String sql){
        boolean result = true;
        try 
        {
            statement = conexao.createStatement(
                    ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
            resultset = statement.executeQuery(sql);
        //    JOptionPane.showMessageDialog(null,"SQL executada com sucesso! "+sql);
        }
        catch(SQLException sqlEx) 
        {
        //   JOptionPane.showMessageDialog(null,"Não foi possível "+
        //           "executar o comando sql,"+sqlEx+", o sql passado foi "+sql);
           sqlEx.printStackTrace();
           result = false;
        }
        return result;
    }   
  
}

Obrigada!

F

Keila, esse problema está dando pq o seu objeto Connection está como nulo.

Mas pelo visto não me parece nada de errado, apesar de estar meio confuso o código.

Mas está aparecendo que não foi instanciado o objeto connectio

Pow estou com um pouco de pressa hj então vou postar a classe de Conexao que normalmente uso

Se te ajudar com algo

import java.sql.*;
import java.text.SimpleDateFormat;
import javax.swing.JOptionPane;

public class Conexao {
	
	protected Connection con;

	protected Statement stmt;

	protected ResultSet rs;

	protected PreparedStatement ps;

	protected SimpleDateFormat formatoDia;

	protected SimpleDateFormat formatoHora;

	public Conexao() {
		formatoDia = new SimpleDateFormat("dd/MM/yyyy");
		formatoHora = new SimpleDateFormat("HH:mm:ss");
	}

	protected void conectar() {
		try {
			Class.forName("com.mysql.jdbc.Driver");  
            con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/scihe?user=root&password=");
			stmt = con.createStatement();
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, e, "ERRO", JOptionPane.ERROR_MESSAGE, null);
			System.exit(0);
		}
	}

	protected void desconectar() {
		try {
			rs.close();
			stmt.close();
			con.close();
			ps.close();
		} catch (Exception e) {
		}
	}

}

Quando eu uso uma classe utilizando a minha de Conexão, eu crio essa nova classe extendendo essa. Aew normalmente meu código de um método fica assim.

public void listar() {
		try {
			conectar();
			rs = stmt.executeQuery("Aqui eu descrevo a Query");
            //Aqui eu descrevo o método
			desconectar();
		} catch (Exception e) {
			desconectar();
		}
	}

Espero que te dê uma ajuda

K

[color=blue][b]Boa Noite Galerinha…

Outro dia eu estava na faculdade desenvolvendo um sistenha RMI, e tive um problema de conexãi nula, igual ao meu TCC. Aí eu descobri que eu não estava passando a conexão para esse meu sisteminha…

Aí eu resolvi olhar com mais cuidado para o meu TCC e pesquisar sobre conexões…

Descobri que qdo se tem um subrelatório em que o sql fica no próprio sub, enão é passado um array por exemplo…
Vc precisa passar uma conexão para a sua classe .java.

Então o que eu fiz, fui na minha classe conexão, já postada aqui anteriormente e criei um método:[/b][/color]

public Connection getConexao(){ return conexao; }
[color=blue]
sendo conexao uma variável do tipo Connetion que eu já havia instanciado na minha classe conexão.

E ao invés de passar um resultset eu mando conm.getConexao().[/color]
[color=violet]
[b]E agora estou muito feliz pq termineu todos os meus relatórios…

Agradeço a todos que me ajudaram… foi de grande valia para mim…[/b][/color]

F

D nada Keila, o GUJ está aqui pra isso.

:slight_smile: :smiley: 8) :lol: :stuck_out_tongue: :wink:

Criado 2 de junho de 2010
Ultima resposta 20 de jun. de 2010
Respostas 21
Participantes 5