Ireports + sql server + nome de tabela usada na query mudando por parametro

7 respostas
thiagofacanha

Opa pessoal…Alguem sabe como faço para que o nome da tabela usada na query do IReports possa ser mudada por parametro?

meu codigo é o seguinte

Select * from (
SELECT tb.usr 
     , tb.dstname
     , COUNT(tb.dstname) count
     , ROW_NUMBER() OVER (ORDER BY COUNT(tb.dstname) DESC) AS 'RowNumber'
  FROM [rawsyslogdb_20081113].[dbo].[sw_0006B1308FF8] tb
WHERE tb.[USR]  =  $P{P_USU}
    AND tb.dstname not like '10.0%'  --Exclui os servidores
    AND tb.dstname not like '%mail%' --Exclui emails
    AND tb.dstname not IN ('74.52.208.234','69.64.46.2','74.52.150.42')--Desconhecido
    AND tb.msg is  null --Apenas sites acessados.. sem conexoes de informação.
    
 GROUP BY tb.usr 
        , tb.dstname) tab
where tab.RowNumber < 11

Tem como colocar um parametro no nome da tabela? pois a aplicacao cria uma tabela para cada dia…
Já possuo o select para pegar a data no formato do nome da tabela.

select '20' + CONVERT(VARCHAR(16),GETDATE(), 12) dat

Caso alguem tenha uma luz avisa ok?

7 Respostas

CarlosEduardoDantas

thiagofacanha:
Opa pessoal…Alguem sabe como faço para que o nome da tabela usada na query do IReports possa ser mudada por parametro?

meu codigo é o seguinte

Select * from (
SELECT tb.usr 
     , tb.dstname
     , COUNT(tb.dstname) count
     , ROW_NUMBER() OVER (ORDER BY COUNT(tb.dstname) DESC) AS 'RowNumber'
  FROM [rawsyslogdb_20081113].[dbo].[sw_0006B1308FF8] tb
WHERE tb.[USR]  =  $P{P_USU}
    AND tb.dstname not like '10.0%'  --Exclui os servidores
    AND tb.dstname not like '%mail%' --Exclui emails
    AND tb.dstname not IN ('74.52.208.234','69.64.46.2','74.52.150.42')--Desconhecido
    AND tb.msg is  null --Apenas sites acessados.. sem conexoes de informação.
    
 GROUP BY tb.usr 
        , tb.dstname) tab
where tab.RowNumber < 11

Tem como colocar um parametro no nome da tabela? pois a aplicacao cria uma tabela para cada dia…
Já possuo o select para pegar a data no formato do nome da tabela.

select '20' + CONVERT(VARCHAR(16),GETDATE(), 12) dat

Caso alguem tenha uma luz avisa ok?

pelo que eu entendi… vc pode fazzer isso

Select * from (
SELECT tb.usr 
     , tb.dstname
     , COUNT(tb.dstname) count
     , ROW_NUMBER() OVER (ORDER BY COUNT(tb.dstname) DESC) AS 'RowNumber'
  FROM $P{tabela} tb
WHERE tb.[USR]  =  $P{P_USU}
    AND tb.dstname not like '10.0%'  --Exclui os servidores
    AND tb.dstname not like '%mail%' --Exclui emails
    AND tb.dstname not IN ('74.52.208.234','69.64.46.2','74.52.150.42')--Desconhecido
    AND tb.msg is  null --Apenas sites acessados.. sem conexoes de informação.
    
 GROUP BY tb.usr 
        , tb.dstname) tab
where tab.RowNumber < 11

crie o parametro $P{tabela} em view | parameters e aliemnte-o na sua aplicação através de um map …

Map parametros = new HashMap();
mapa.put(tabela,"[rawsyslogdb_20081113].[dbo].[sw_0006B1308FF8]"); //por exemplo
JasperPrint jprint = JasperFillManager.fillReport(jreport, parametros , con);
thiagofacanha

Eu tentei isso. Não deu certo.
Ele deu o erro

“Query parameter not found: P_TAB"
Sendo que eu criei o parametro… e quando estou na query ele fica dizendo"Unrecognized SQL escape ‘p’ at line position 55”

Esses erros aparecem quando tento simular no ireports mesmo…

CarlosEduardoDantas

brother… nesse seu caso acho que já é mais interessante fazer a consulta na aplicação e mandar para o relatório apenas os dados… assim:

String url = "jdbc:mysql://localhost/banco";
String user = "root";
String senha = "root";
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url,user,senha);	
ResultSet rs = stm.executeQuery( "select * from [rawsyslogdb_20081113].[dbo].[sw_0006B1308FF8]" );

/* Implementação da Interface JRDataSource para DataSource ResultSet */
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
   
/* Executa o Relatório */
JasperPrint impressao = JasperFillManager.fillReport( relatorio , null, jrRS );

entao o relatorio nao terá a consulta… apenas receberá a resposta pela classe JRResultSetDataSource

thiagofacanha

O problema é que estou usando apenas o Ireports e o jasperServer.
Só se eu fizesse toda a consulta no jasperserver e passasse tudo que preciso por parametro pro ireports… :idea:
Mas nem sei se vai dar certo. Posso acabar tendo o mesmo problema lá… mas vou tentar aki

CarlosEduardoDantas

thiagofacanha:
O problema é que estou usando apenas o Ireports e o jasperServer.
Só se eu fizesse toda a consulta no jasperserver e passasse tudo que preciso por parametro pro ireports… :idea:
Mas nem sei se vai dar certo. Posso acabar tendo o mesmo problema lá… mas vou tentar aki

me perdoe pela ignorancia… mas do que se trata o jasperServer? É alguma ferramenta de carga de dados da jaspersoft?

estou perguntando pq de qq forma vc precisa de alguma coisa pra rodar o seu .jasper… e até aonde eu conheço, vc vai precisar do jasperReports, logo concluo que o codigo que te mostrei no post anterior pode ser perfeitamente portável para a sua aplicacao.

thiagofacanha

O JasperServer é um servidor de relatórios da mesma empresa do ireports.
Eu mando para ele os jrxml e ele gera os relatorios envia por email em data programadas ou gera pelo usuario mediante entrada com usuario e senha…
Por isso que acho q o código não pode me ajudar. Pq não terei nenhuma pagina jsp entre meu jrxml e a criação do pdf.
estou pesquisando sobre Tabelas Variáveis do sql server para ver se acho uma luz… mas acho q tbm não vai dar…
:´(
Acha que mesmo com o jasper server dá para fazer algo?
Vlw

CarlosEduardoDantas

thiagofacanha:
O JasperServer é um servidor de relatórios da mesma empresa do ireports.
Eu mando para ele os jrxml e ele gera os relatorios envia por email em data programadas ou gera pelo usuario mediante entrada com usuario e senha…
Por isso que acho q o código não pode me ajudar. Pq não terei nenhuma pagina jsp entre meu jrxml e a criação do pdf.
estou pesquisando sobre Tabelas Variáveis do sql server para ver se acho uma luz… mas acho q tbm não vai dar…
:´(
Acha que mesmo com o jasper server dá para fazer algo?
Vlw

humm… interessante… eu sabia que a jasperSoft dispoem de vários produtos… mas só conheço o jasperReports e o iReport que são free claro… o jasperServer é novo pra mim… obrigado

bem… neste caso… a solucao de momento que eu estou pensando… é gambiarra… mas depois pensamos em outra… vc pode editar a query do seu jrxml… ou seja… cada vez que precisar de uma tabela nova, vc modifica o seu .jrxml no fonte… como ele nem é compilado ainda, é facil de fazer… basta colocar o conteudo do .jrxml em uma string e dar um replace dentro do conteudo de

Criado 13 de novembro de 2008
Ultima resposta 14 de nov. de 2008
Respostas 7
Participantes 2