none
ERRO Impressão em Relatórios RRS feed

  • Pergunta

  • Boa noite galera!,

    Estou tentando desenvolver meu primeiro relatório em vb.

    Até consegui fazerpegando base um exemplo da net.

    Ele é exibido certinho, porém ele da erro na hora que clico para impressão:

    Alguem sabe o que pode ser?

    Agradeço desde já.

    terça-feira, 4 de junho de 2013 21:59

Todas as Respostas

  • Segue o cod que estou fazendo se puder ajudar a me ajudar, rs!

    Imports System.Drawing.Printing
    Imports System.Data.OleDb
    
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Private leitor As OleDbDataReader
        Private paginaAtual As Integer = 1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim conn As New OleDbConnection()
            conn.ConnectionString = "Provider=OraOLEDB.Oracle;" & _
       "Data Source=XE;" & _
       "User ID=system;" & _
       "Password=123"
            Dim cmd As OleDbCommand = conn.CreateCommand
    
            cmd.CommandText = "Select cli_nome from cliente"
            conn.Open()
    
            leitor = cmd.ExecuteReader()
    
            Try
                While leitor.Read()
                    'cria um novo documento para impressão
                    Dim pd As PrintDocument = New PrintDocument()
    
                    'relaciona o objeto pd ao procedimento rptProdutos
                    AddHandler pd.PrintPage, AddressOf Me.rptProdutos
    
                    'cria uma nova instância do objeto PrintPreviewDialog()
                    Dim objPrintPreview As PrintPreviewDialog = New PrintPreviewDialog()
    
                    'define algumas propriedades do obejto
                    With objPrintPreview
                        'indica qual o documento vai ser visualizado
                        .Document = pd
                        .WindowState = FormWindowState.Maximized
                        .PrintPreviewControl.Zoom = 1   'maximiza a visualização
                        .Text = "Catálogo de Produtos"
                        'exibe a janela de visualização para o usuário
                        .ShowDialog()
                    End With
    
                End While
                leitor.Close()
                conn.Close()
            Catch erro As Exception
                MsgBox("Erro " & vbCrLf & erro.ToString, MsgBoxStyle.Critical, "Erro")
            End Try
        End Sub
    
        Private Sub rptProdutos(ByVal sender As Object, ByVal Relatorio As System.Drawing.Printing.PrintPageEventArgs)
    
            Dim cliente As String
       
    
            Dim linhasPorPagina As Single = 0
            Dim posicaoDaLinha As Single = 0
            Dim linhaAtual As Single = 0
    
            Dim margemEsq As Single = Relatorio.MarginBounds.Left
            Dim margemSup As Single = Relatorio.MarginBounds.Top + 100
            Dim margemDir As Single = Relatorio.MarginBounds.Right
            Dim margemInf As Single = Relatorio.MarginBounds.Bottom
    
            Dim fonteTitulo As Font
            Dim fonteColuna As Font
            Dim fonteRodape As Font
            Dim fonteNormal As Font
    
            Dim caneta As Pen = New Pen(Color.Black, 1)
    
            fonteTitulo = New Font("Verdana", 15, FontStyle.Bold)
            fonteColuna = New Font("Verdana", 10, FontStyle.Bold)
            fonteRodape = New Font("Verdana", 8)
            fonteNormal = New Font("Verdana", 10)
    
            'impressão do cabeçalho
            Relatorio.Graphics.DrawLine(caneta, margemEsq, 60, margemDir, 60)
    
            Relatorio.Graphics.DrawLine(caneta, margemEsq, 130, margemDir, 130)
            Relatorio.Graphics.DrawString("Catálogo de Produtos", fonteTitulo, Brushes.Blue, margemEsq + 275, 80, New StringFormat())
    
            'impressão do titulo das colunas
            Relatorio.Graphics.DrawString("Cliente", fonteColuna, Brushes.Red, margemEsq, 140, New StringFormat())
            Relatorio.Graphics.DrawString("Produto", fonteColuna, Brushes.Red, margemEsq + 100, 140, New StringFormat())
            Relatorio.Graphics.DrawString("Preço", fonteColuna, Brushes.Red, margemEsq + 500, 140, New StringFormat())
            Relatorio.Graphics.DrawLine(caneta, margemEsq, 170, margemDir, 170)
    
            'define o número de linhas por página
            'para isto faço a divisão da área de impressão pelo tamanho da fonte subtraido do valor 10
            linhasPorPagina = Relatorio.MarginBounds.Height / fonteNormal.GetHeight(Relatorio.Graphics) - 10
    
            'para imprimir os dados da base de dados no relatório teremos que atribuir as variáveis os valores
            'através do objeto OleDbDatareader
            cliente = leitor(0) 'codigo do produto
            
            'agora vamos dar um laço através dos registros do DataReader levando em conta o número de linhas
            'permitido para a página. Enquanto a linha atual for menor que o número de linhas por página e não
            'final de arquivo estaremo no loop
            While (linhaAtual < linhasPorPagina And leitor.Read())
    
                'acompanha a posição da linha atual
                posicaoDaLinha = margemSup + (linhaAtual * fonteNormal.GetHeight(Relatorio.Graphics))
    
                'imprime os dados relativo ao codigo , nome do produto e preço do produto
                Relatorio.Graphics.DrawString(cliente, fonteNormal, Brushes.Black, margemEsq, posicaoDaLinha, New StringFormat())
    
    
                'faz o incremento no número de linha
                linhaAtual += 1
    
                'verifica se ainda podemos imprimir , ou seja , se a linha atual é menor que o número
                'de linhas permitido pela página. Se for continuamos a atribuir os dados e a imprimir
                If (linhaAtual < linhasPorPagina) Then
                    cliente = leitor(0) 'codigo do produto
    
                End If
    
            End While
    
            'imprime o rodape no relatorio
            Relatorio.Graphics.DrawLine(caneta, margemEsq, margemInf, margemDir, margemInf)
            Relatorio.Graphics.DrawString(System.DateTime.Now, fonteRodape, Brushes.Black, margemEsq, margemInf, New StringFormat())
            Relatorio.Graphics.DrawString("Pag. " & paginaAtual.ToString, fonteRodape, Brushes.Black, margemDir - 50, margemInf, New StringFormat())
    
            'incrementa a página atual
            paginaAtual += 1
    
        End Sub
    
    
    End Class
    

    terça-feira, 4 de junho de 2013 23:40
  • Alguem sabe , ja desenvolveu relatórios assim, por favor?
    sexta-feira, 14 de junho de 2013 00:38
  • E ae pessoal, alguem pra ajudar? Último up.

    Att, Felipo Gonçalves | Microsoft Contingent Staff

    terça-feira, 2 de julho de 2013 13:28