Inquiridor
Relotorio mandando variavel

Pergunta
-
Existe alguma forma que eu crie um Reletorio como se fosse crystal reporte ou algo assim que não use banco da dados , so mandando as variaveis
Exemplo eu crie o Modelo no word ou algum programa e so mande as variavel e ele preencha nos campos ?
Vb6
- Movido Eder Costa terça-feira, 26 de julho de 2011 14:25 Processos de relatorios (De:VB.NET e Visual Basic)
Todas as Respostas
-
Marcelo, existem várias formas de fazer isso. Você pode ter um modelo no Word e criar palavras chaves, que serão substituídas e depois salvar o arquivo. Mas o Crystal Reports te auxilia no que tange a criação de gráficos, facilitação de criação de um layout amigável e manutenção.
Você cria no Crystal campos do tipo Paramêtros, exemplo: @NOME.
Montei um exemplo simples e genérico para passagem dessas informações para o Crystal:
Public Sub lsubCarregaRelatorio(ByVal lobjValorParametros() As Object, ByVal lstrNomeParametros() As String) Dim lrptRelatorio As New ReportDocument Dim lconInfo As New ConnectionInfo Dim ltblInfo As New TableLogOnInfo Dim lparParametro As ParameterFieldDefinition Dim lfilCampo As ParameterFieldDefinitions Dim ldisDiscrete As ParameterDiscreteValue Dim lvalValor As ParameterValues '# Passa os dados para conexão lconInfo.DatabaseName = meuBanco lconInfo.ServerName = meuServidor lconInfo.UserID = meuUsuario lconInfo.Password = minhaSenha '# Carrega o arquivo rpt lrptRelatorio.Load(caminhoMeuArquivoRPT) '# Realiza a conexão das tabelas do relatório For Each ltblTable As Table In lrptRelatorio.Database.Tables ltblInfo.ConnectionInfo = lconInfo ltblTable.ApplyLogOnInfo(ltblInfo) Next '# Conexão das tabelas dos subrelatórios (caso exista!) For lintContador = 1 To lrptRelatorio.Subreports.Count For Each ltblTable As Table In lrptRelatorio.Subreports(lintContador - 1).Database.Tables ltblInfo.ConnectionInfo = lconInfo ltblTable.ApplyLogOnInfo(ltblInfo) Next Next '# Recebe os parâmetros existentes no rpt lfilCampo = lrptRelatorio.DataDefinition.ParameterFields '# Loop que irá configurar cada parâmetro For lintContador As Integer = 0 To UBound(lobjValorParametros) lparParametro = lfilCampo.Item(lstrNomeParametros(lintContador)) lvalValor = lparParametro.CurrentValues ldisDiscrete = New ParameterDiscreteValue '# Verifica o tipo de dado para passar o valor correto If IsNumeric(lvalValor) = True Then ldisDiscrete.Value = lobjValorParametros(lintContador) ElseIf IsDateTime(lvalValor) Then '# Verifica se existe informações nas datas If (lobjValorParametros(lintContador) = "00:00:00" Or _ lobjValorParametros(lintContador) = "0001-01-01 00:00:00" Or _ Trim$(lobjValorParametros(lintContador)) = "") Then ldisDiscrete.Value = "1899-12-30 00:00:00" Else ldisDiscrete.Value = CDate(lobjValorParametros(lintContador)) End If Else ldisDiscrete.Value = IIf(IsDBNull(lobjValorParametros(lintContador)), DBNull.Value, lobjValorParametros(lintContador)) End If '# Adiciona e confirma os valores lvalValor.Add(ldisDiscrete) lparParametro.ApplyCurrentValues(lvalValor) Next '# Usando o ReportViewer crvVisualizador.ReportSource = lrptRelatorio crvVisualizador.Refresh() End Sub
Onde lobjValorPametros e lstrNomeParametros são vetores que, respectivamente, contém na mesma ordem o valor e nome do seu parâmetro no Crystal. Exemplo:
Indíce Nome Valor
0 @NOME "Leonardo"
1 @CPF "123456789"
"Mas a persistência é o que leva a perfeição."- Sugerido como Resposta Eder Costa terça-feira, 26 de julho de 2011 14:22
-
O proprio crystal reposrts faz isso... Voce pode criar um relatorio somente com as definiçoes dos campos e depois preenche-lo com ADO.
O codigo baixo cria um dataset e passa ele como parametro para um relatorio Crystal
'open rs Dim rsrap As ADODB.Recordset Set rsrap = CreateObject("ADODB.Recordset") 'create fields rsrap.fields.Append "field1", adInteger rsrap.fields.Append "field2", adInteger rsrap.fields.Append "field3", adInteger rsrap.fields.Append "field4", adInteger rsrap.fields.Append "field5", adInteger rsrap.fields.Append "field6", adInteger rsrap.fields.Append "field7", adVarChar, 50 'put values in the fields rsrap.Open While x < 10 rsrap.AddNew rsrap(0) = x rsrap(1) = x + 1 rsrap(2) = x + 2 rsrap(3) = x + 3 rsrap(4) = x + 4 rsrap(5) = x + 5 rsrap(6) = "tekst" & x rsrap.Update x = x + 1 wend Set CrRep = CrAppl.OpenReport(App.Path + "\crystal\" + CryReportName) CrRep.Database.Tables(1).SetDataSource rsrap, 3 CRViewer1.ReportSource = CrRep CRViewer1.EnablePrintButton = True CRViewer1.EnableExportButton = True CRViewer1.EnablePrintButton = True CRViewer1.viewReport
para criar o relatorio porceda como estes tutoriais:
http://www.youtube.com/watch?v=3NsHlNxAB70
http://www.youtube.com/watch?v=8HjOP_PnMsc
http://www.dataaccess.com/kbasepublic/kbprint.asp?ArticleId=2185
Uma vez criado o Relatorio com o bancod "Definition Fields Only" (um falso banco) vc pode passar o recordset que ele vai linkar
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
SOGI INFORMATIQUE LTÉE (http://www.sogi.com)- Sugerido como Resposta Eder Costa terça-feira, 26 de julho de 2011 14:22
-
Na verdade eu uso um form que eu desenho da forma que eu quero mais estou tendo alguns problema ele não imprimi numa folha certo sempre da problema esou ainda com receio de usar cristal, pois as vezes que vi tinha muita coisa para instalar e tinha que ter banco de dados! Como banco de dados é uma coisa que eu tambem tirei do meu programa porque sempre tinha uma tabela ou informação que se esquece ai tem que abrir e incluir a tabela e informação fazer isso num cliente é facil fazer isso em 20 complica. Ai uso mesmo arquivos TXT que se não existe ele cria
-
-
Marcelo, existem várias formas de fazer isso. Você pode ter um modelo no Word e criar palavras chaves, que serão substituídas e depois salvar o arquivo. Mas o Crystal Reports te auxilia no que tange a criação de gráficos, facilitação de criação de um layout amigável e manutenção.
Você cria no Crystal campos do tipo Paramêtros, exemplo: @NOME.
Montei um exemplo simples e genérico para passagem dessas informações para o Crystal:
Public Sub lsubCarregaRelatorio(ByVal lobjValorParametros() As Object, ByVal lstrNomeParametros() As String) Dim lrptRelatorio As New ReportDocument Dim lconInfo As New ConnectionInfo Dim ltblInfo As New TableLogOnInfo Dim lparParametro As ParameterFieldDefinition Dim lfilCampo As ParameterFieldDefinitions Dim ldisDiscrete As ParameterDiscreteValue Dim lvalValor As ParameterValues '# Passa os dados para conexão lconInfo.DatabaseName = meuBanco lconInfo.ServerName = meuServidor lconInfo.UserID = meuUsuario lconInfo.Password = minhaSenha '# Carrega o arquivo rpt lrptRelatorio.Load(caminhoMeuArquivoRPT) '# Realiza a conexão das tabelas do relatório For Each ltblTable As Table In lrptRelatorio.Database.Tables ltblInfo.ConnectionInfo = lconInfo ltblTable.ApplyLogOnInfo(ltblInfo) Next '# Conexão das tabelas dos subrelatórios (caso exista!) For lintContador = 1 To lrptRelatorio.Subreports.Count For Each ltblTable As Table In lrptRelatorio.Subreports(lintContador - 1).Database.Tables ltblInfo.ConnectionInfo = lconInfo ltblTable.ApplyLogOnInfo(ltblInfo) Next Next '# Recebe os parâmetros existentes no rpt lfilCampo = lrptRelatorio.DataDefinition.ParameterFields '# Loop que irá configurar cada parâmetro For lintContador As Integer = 0 To UBound(lobjValorParametros) lparParametro = lfilCampo.Item(lstrNomeParametros(lintContador)) lvalValor = lparParametro.CurrentValues ldisDiscrete = New ParameterDiscreteValue '# Verifica o tipo de dado para passar o valor correto If IsNumeric(lvalValor) = True Then ldisDiscrete.Value = lobjValorParametros(lintContador) ElseIf IsDateTime(lvalValor) Then '# Verifica se existe informações nas datas If (lobjValorParametros(lintContador) = "00:00:00" Or _ lobjValorParametros(lintContador) = "0001-01-01 00:00:00" Or _ Trim$(lobjValorParametros(lintContador)) = "") Then ldisDiscrete.Value = "1899-12-30 00:00:00" Else ldisDiscrete.Value = CDate(lobjValorParametros(lintContador)) End If Else ldisDiscrete.Value = IIf(IsDBNull(lobjValorParametros(lintContador)), DBNull.Value, lobjValorParametros(lintContador)) End If '# Adiciona e confirma os valores lvalValor.Add(ldisDiscrete) lparParametro.ApplyCurrentValues(lvalValor) Next '# Usando o ReportViewer crvVisualizador.ReportSource = lrptRelatorio crvVisualizador.Refresh() End Sub
Onde lobjValorPametros e lstrNomeParametros são vetores que, respectivamente, contém na mesma ordem o valor e nome do seu parâmetro no Crystal. Exemplo:
Indíce Nome Valor
0 @NOME "Leonardo"
1 @CPF "123456789"
"Mas a persistência é o que leva a perfeição." -
O proprio crystal reposrts faz isso... Voce pode criar um relatorio somente com as definiçoes dos campos e depois preenche-lo com ADO.
O codigo baixo cria um dataset e passa ele como parametro para um relatorio Crystal
'open rs Dim rsrap As ADODB.Recordset Set rsrap = CreateObject("ADODB.Recordset") 'create fields rsrap.fields.Append "field1", adInteger rsrap.fields.Append "field2", adInteger rsrap.fields.Append "field3", adInteger rsrap.fields.Append "field4", adInteger rsrap.fields.Append "field5", adInteger rsrap.fields.Append "field6", adInteger rsrap.fields.Append "field7", adVarChar, 50 'put values in the fields rsrap.Open While x < 10 rsrap.AddNew rsrap(0) = x rsrap(1) = x + 1 rsrap(2) = x + 2 rsrap(3) = x + 3 rsrap(4) = x + 4 rsrap(5) = x + 5 rsrap(6) = "tekst" & x rsrap.Update x = x + 1 wend Set CrRep = CrAppl.OpenReport(App.Path + "\crystal\" + CryReportName) CrRep.Database.Tables(1).SetDataSource rsrap, 3 CRViewer1.ReportSource = CrRep CRViewer1.EnablePrintButton = True CRViewer1.EnableExportButton = True CRViewer1.EnablePrintButton = True CRViewer1.viewReport
para criar o relatorio porceda como estes tutoriais:
http://www.youtube.com/watch?v=3NsHlNxAB70
http://www.youtube.com/watch?v=8HjOP_PnMsc
http://www.dataaccess.com/kbasepublic/kbprint.asp?ArticleId=2185
Uma vez criado o Relatorio com o bancod "Definition Fields Only" (um falso banco) vc pode passar o recordset que ele vai linkar
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
Existe alguma forma de fazer com que o Vb6 mande o Crystal report pegar um recordset do banco de dados expecifico ?