Ireport

1 resposta
I

Preciso fazer um relatório e preciso que o número de colunas dele não seja fixo, mas que possa variar, por exemplo, quando o relatório for feito para quatro meses possua quatro colunas, quando for feito para seis meses possua seis colunas.
A variação não pode acontecer apenas no número de linhas, mas também no de colunas.
Agradeço qualquer ajuda, obrigado

1 Resposta

P

onde voce quer fazer esse relatorio? em um frame ou relatorios externos com iReport?

se for em frames tenta fazer da seguinte maneira

import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.sql.*;


public class Grid extends JFrame
{
  private static final long serialVersionUID = 1L;
  Connection con;
  JTable table;

  public Grid()
  {
    try
    { 
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        con=DriverManager.getConnection("jdbc:odbc:AGE");
    }
    catch(Exception ex)
    {
        System.out.println("erro na abertura do banco");
    }
    getTable();
  }

private void getTable()
  { 
      Statement st;
      ResultSet rs;
      try
      { 
        st = con.createStatement(); //criando uma conexão com Statement
        rs = st.executeQuery("Select * from agenda");
        Vector cols = new Vector();
        Vector lins = new Vector();
        ResultSetMetaData rsmd = rs.getMetaData();

        for (int i=1;i<=rsmd.getColumnCount();i++)
          cols.addElement( rsmd.getColumnName(i) );

        while (rs.next())
          lins.addElement( getLinha(rs,rsmd) );
        
        table = new JTable(lins,cols);
        JScrollPane sp = new JScrollPane(table);
        
        this.getContentPane().add(sp,BorderLayout.CENTER);
        validate();             // utilizado junto com o Layout 
        st.close();
      }
      catch (Exception ex)
      {
      }
    }

    private Vector getLinha(ResultSet rs, ResultSetMetaData rsmd)
    {
      Vector vect = new Vector();
      try
       {
         for (int i=1; i<=rsmd.getColumnCount(); i++)
            switch (rsmd.getColumnType(i))
            { case Types.VARCHAR: vect.addElement(rs.getString(i));
                                  break;
              case Types.INTEGER: vect.addElement(new Long(rs.getLong(i)));
                                  break;
            }
       }
      catch (Exception ex) {}
      return vect;
    } 
}

Apenas mude seu SELECT que ja funciona, pois ele tras o numero de linhas e numero de colunas de sua consulta, monta sua tabela com esses valores, nunca com valores fixos.

Criado 3 de setembro de 2006
Ultima resposta 5 de set. de 2006
Respostas 1
Participantes 2