Relatórios em VB 2010

jags17

Power Member
Boas Pessoal,

Estou de momento em estágio numa universidade e o meu chefe pediu-me para desenvolver uma aplicação simples para a reprografia, para registar as operações efetuadas e quem as efetuou...ele queria também que a aplicação gerasse relatórios para que, por exemplo, ele pudesse saber quantas folhas A4 a cores foram imprimidas no dia X (é um exemplo)...o programa, aparte dos relatórios está a funcionar em pleno, o meu problema centra-se em construir os relatórios....ora relatórios é uma coisa que nunca vi nem usei na vida e estou um bocado às cegas e a bater com a cabeça na parede até acertar...já tentei usar Crystal Reports e (não sei porque) pede-me credenciais da base de dados (que é Access e foi criada graficamente sem credenciais nenhumas)...após várias tentativas de usar Crystal Reports passei ao gerador de relatórios nativo do Visual Studio 2010 mas este so aceita que eu escolha somente uma tabela do dataset para visualizar os dados, o que não me interessa porque a base de dados (Access) tem 3 tabelas relacionadas entre si e eu preciso dos dados das 3 para que estes "batam certo" uns com os outros (não se me fiz entender muito bem...)......

Se alguem tiver experiência ou souber como fazer relatórios em Visual Basic 2010 com base de dados Access por favor diga-me...

Obrigadão

Cumprimentos
 
Boas Cerzedelo,

Obrigado pela ajuda!

Mas o que o pessoal também pretende é que seja possivel guardar o relatório em PDF...e nos links que tu enviaste essa opção não aparece....ora eu consegui usar o metodo de relatórios nativo do VS 2010 mas este é todo processado graficamente...existe alguma maneira para que se possa criar todo o relatório via código incluindo as sintaxes SQL para fazer a consulta para obter os dados?


Cumprimentos
 
se percebi bem o problema, uma das possibilidades que tens, é criar numa tabela temporaria com os dados a imprimir, simplificando o processo de ligaçao com o Crystal Reports, que segundo dizes, so permite ligar a uma tabela.
 
Boas Armadillo,

Obrigado pela resposta...o problema é que vao ser necessarios vários tipos de consultas, 4 para ser exato que sao:

1 - Consultar operações efetuadas por utilizador mediante uma data que será o utilizador a inserir atraves de um datetimepicker;
2 - Consultar operçaões efectuadas por produto """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""";
3 - Exibir um gráfico de estatística com o somatório de operações efectuadas durante 1 ano (uma barra por mes);
4 - Exibir um gráfico de estatística com o somatório de operações efectuadas durante 1 mes (uma barra por dia);

Como os campos de nome de utilizador e datas são introduzidos ou escolhidos manualmente pelo utilizador, a string da consulta vai variar consoante a escolha...por isso é que preciso mesmo de criar todo o relatório via código, inclusive a string SQL que vai ser efetuada para ir buscar os dados....

Vou agora mostrar 2 partes do meu trabalho com isto...

A 1ª foi quando tentei usar o Crystal Reports a ir buscar os dados atraves do Dataset introduzido automaticamente quando se liga a BD ao programa....o resultado foi este...não sei o que significa uma vez que a base de dados é em Access e foi criada no Access 2010 graficamente sem credenciais de qualquer especie...no entanto notei que quando se faz a ligação da base de dados ao projecto utilizando o Wizard aparece isto....deixo por defeito como está mas mesmo assim introduzindo estes dados o login falha....


A 2ª...depois de me fartar de bater com a cabeça na parede por causa do crystal resolvi ir para o gerador de relatórios nativo do VS 2010....e o código que tenho para já é o seguinte:

Imports System.Data.OleDb
Imports Microsoft.Reporting.WinForms

Public Class Form2
Dim cmd As OleDbCommand
Dim da As OleDbDataAdapter
Dim ds As DataSet

Dim sqlQRY As String = ""

Dim reportPath As String = "Reprografia.Report1.rdlc"
Dim sReportDataSource As New ReportDataSource

Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'BD_ReprografiaDataSet.Consulta1' table. You can move, or remove it, as needed.
Me.Consulta1TableAdapter.Fill(Me.BD_ReprografiaDataSet.Consulta1)
'TODO: This line of code loads data into the 'BD_ReprografiaDataSet.Utilizador' table. You can move, or remove it, as needed.
Me.UtilizadorTableAdapter.Fill(Me.BD_ReprografiaDataSet.Utilizador)
'TODO: This line of code loads data into the 'BD_ReprografiaDataSet.Impressoes' table. You can move, or remove it, as needed.
Me.ImpressoesTableAdapter.Fill(Me.BD_ReprografiaDataSet.Impressoes)
'TODO: This line of code loads data into the 'BD_ReprografiaDataSet.Impressoes' table. You can move, or remove it, as needed.
'TODO: This line of code loads data into the 'BD_ReprografiaDataSet.Utilizador' table. You can move, or remove it, as needed.

Try

sqlQRY = "Select * from Consulta1"
viewreports()

Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
Me.ReportViewer1.RefreshReport()
End Sub
Sub viewreports()

ds = New DataSet
da = New OleDbDataAdapter(sqlQRY, con)
da.Fill(ds, "Consulta1")
ReportViewer1.LocalReport.ReportEmbeddedResource = reportPath
sReportDataSource.Name = "DataSet_Consulta1"
sReportDataSource.Value = ds.Tables(0)
ReportViewer1.LocalReport.DataSources.Add(sReportDataSource)
Me.ReportViewer1.RefreshReport()
End Sub
End Class



Este código arranjei-o num projecto que encontrei na net mas devido a incompatibilidades da versão do vb certas funcoes do programa davam erro por isso resolvi transpor o codigo para o meu projecto e o resultado é nada mais nada menos que um relatório vazio, em branco, nem erros nem nada, simplesmente não há informação no relatório e na base de dados a informação está la....

Se alguem puder dar uma vista de olhos e me puder dizer aonde estou a falhar por favor respondam...

Obrigado


Cumprimentos
 
Você criou o Reprografia.report1.rdlc? Pois o controlo ReportViewer, apenas permite embutir no VB o relatório. Pode criar o relatório com o Report Designer do VB se estiver a utlizar uma versão profissional ou se usar o sql server with Advanced Services mesmo na versão express.
Existe um programa de gerar relatórios, livre, substituto do crystal reports, o fiyreporting, que pode experimentar, pena é que foi descontinuado (leia a documentação).
ver: http://gotreportviewer.com/
 
Boas Cerzedelo,

Sim, criei o Relatório usando o wizard do crystal no VB e depois chamei esse relatório para dentro de um report viewer, numa form...acho que é assim que se faz, corrige-me se estiver errado...em relação ao link que mandaste...desculpa mas nao estou a ver o fiyreporting...a documentação é do reportviewer...mas obrigado pela dica...vou procurar...se satisfizer as necessidades que preciso (que não sao muito avançadas) passo para esee...
 
Pelo que sei, (pq não o uso) o crystal tem um visualizador de relatório próprio, que é incluido na barra de ferramentas do VB. Senão o tem é porque provavelmente tem de adicionar a referência ao seu projecto e ao VB.
O Fyireporting, é um programa externo, que substitui o crystal reports, veja em http://www.fyireporting.com/.
 
Boas Cerzedelo,

Sim, eu consegui inserir o visualizador de relatórios do crystal no projeto...simplesmente ele não vai la com o código que tenho...eu ja instalei o fyireporting e ele não me adicionou nada nem me deixou adicionar (da-me uma mensagem de erro) nenhuma referência dentro do VB...tens a certeza que o Fyireporting dá para usar a 100% no VB2010? E que posso usar as minhas proprias querys para ir buscar os dados? É que eu nao estou interessado em que o programa gere o relatorio de forma automatica...quero ser eu a dizer.lhe a query a executar....isso é possivel com o Fyireporting?
Se sim, tens algum exemplo de sintaxe que me possas mostrar??

Obrigado
Cumprimentos
 
Se tem o visualizador do crystal instalado e não lê o relatório, então o problema está no relatório.
Quanto ao fyireporting, eu experimentei-o no VB 2008 e funcionava bem. O fyireporting, pode ser utilizado sem o vb, é um programa externo, que funciona com um programa normal, o que você tem que fazer é seleccionar a base de dados e depois escolher os dados que quer mostrar, e gravar e atribuir um nome ao ficheiro do relatório. Depois, é que tem que instalar a referência no vb, para o poder visualizar, salvo erro um ficheiro, rdlviewer.dll. Conculte a informação no site, tem lá exemplos e um fórum.
Quanto à query que pretende, tem que utilizar parâmetros.
 
Boas Cerzedelo,

O problema é que nos parametros da query estao dados que vai ser o utilizador a preencher, tipo textboxes, a query dá para ser introduzida no VB?
 
Claro que pode, veja o código:

Dim strSQL As String = "INSERT INTO tbl_clientes (nome) VALUES (@nome)" 'instrução inserir
Dim cmd As New OleDbCommand(strSQL, coNn) 'cria o comando e passa os parametros
cmd.Parameters.Add("@nome", OleDbType.VarChar).Value = TextBox18.Text
coNn.Open()
cmd.ExecuteNonQuery()
coNn.Close()

Este caso é para inserir dados, mas pode aplicá-lo a uma consulta através da instrução WHERE. (Select nome From clientes where nome=@nome).
 
Insisto, veja: http://www.macoratti.net/08/04/vbn8_imp.htm
Copie o exemplo, substituindo a ligação à base de dados e a query à sua e tem um relatório, depois é uma questão de ajustamento, (linha mais para esquerda, mais para a direita).
Em resumo:
no evento begin_print, faz a ligação à base de dados( se ainda não a fez) e executa a query.
no evento printpage, desenha o relatótio e manda listar os registos (lendo o datareader... no exemplo leitor.Read(), e obtendo os dados e passando para as variáveis ex: codigo = Leitor.GetInt32(0), (1º elemento do datareader e em principio da sua tabela), depois é só listá-lo com a função e.graphics.drawstring (codigo,...)
no evento end_print, fechar as ligações (ex. reader.close)
Não se esqueça, leia bem o documento, e copie o que lá está e tem um relatório pronto a imprimir.
 
Ok, obrigado por toda a sua ajuda.

Já agora...eu tambem vou precisar de relatórios sob o formato de gráfico...utilizando o wizard no VB para o fazer o relatório aparece-me em branco, o que não faz sentido pk segui varios tutoriais, todos da mesma forma (não tem muito que enganar) e mesmo assim o relatório nao se gera, mas tambem nao da erros...tenho a certeza absoluta que existem dados para relacionar mas estes simplesmente nao aparecem...não é preciso (acho eu) código nenhum uma vez que nao sao utilizadas (acho) querys neste tipo de relatório..tens alguma experiencia com isto que me possas ajudar?
 
Última edição:
Em termos de gerar gráficos em VB, confesso que a minha experiência é pouca. Mas o VB10, tem um controlo Microsoft Chart Control, que serve para produzir gráficos, veja estes tópicos:
http://www.macoratti.net/10/09/vbn_graf.htm
http://www.macoratti.net/10/09/vbn_graf2.htm
http://www.portugal-a-programar.org/forum/index.php?topic=31665.0
Quanto a imprimir o gráfico, veja o tópico, tem algumas informações importantes:
http://social.msdn.microsoft.com/Forums/pt-PT/504/thread/7d564d05-0c25-42ed-b9c3-bde94dc320f0
Espero que ajude.
 
Última edição:
Cerzedelo ajudou e muito! Obrigado!
Sem querer ser chato nem abusar da sorte, mas há alguma possibilidade de guardar os charts como PDF?

Cumprimentos
 
Back
Topo