none
Relotorio mandando variavel RRS feed

  • 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)
    sexta-feira, 22 de julho de 2011 02:55

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
    sexta-feira, 22 de julho de 2011 12:55
  • 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

    http://communities.bentley.com/products/plant/design___engineering/w/plant_design_and_engineering__wiki/oppid-how-to-create-a-new-report-using-crystal-reports.aspx

     

     

    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
    sexta-feira, 22 de julho de 2011 13:51
  • 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
    sexta-feira, 22 de julho de 2011 19:02
  • Olá Marcelo!

    Se a ajuda dos amigos acima não atende o teu problema, acredito que no fórum de relatórios você possa ter uma resposta melhor.

    att;


    Eder Costa
    LATAM Forum Support Engineer
    Microsoft Corporation
    forumguys
    terça-feira, 26 de julho de 2011 14:24
  • 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."
    Existe alguma forma de fazer com que o Vb6 mande o Crystal report pegar um recordset do banco de dados expecifico ?
    sexta-feira, 29 de julho de 2011 13:19
  • 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

    http://communities.bentley.com/products/plant/design___engineering/w/plant_design_and_engineering__wiki/oppid-how-to-create-a-new-report-using-crystal-reports.aspx

     

     

    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 ?
    sexta-feira, 29 de julho de 2011 13:20