none
PrintDocument RRS feed

  • Pergunta

  • Public Class Form1
        Inherits System.Windows.Forms.Form
        Private printFont As Font
        Private dr_os As SqlDataReader

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Try
                Dim SQL_OS As New StringBuilder()

                SQL_OS.Append("select * from Os where nroOs < 150 order by data desc ")

                Dim cmd_os As New SqlCommand(SQL_OS.ToString(), connection)
                Dim dr_os As SqlDataReader = cmd_os.ExecuteReader()

                Try
                    printFont = New Font("Arial", 10)
                    Dim pd As New PrintDocument()
                    AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage

                    pd.Print()
                Finally
                    dr_os.Close()
                End Try
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

        Private Sub pd_PrintPage(sender As Object, ev As PrintPageEventArgs)
            Dim linesPerPage As Single = 0
            Dim yPos As Single = 0
            Dim count As Integer = 0
            Dim leftMargin As Single = ev.MarginBounds.Left
            Dim topMargin As Single = ev.MarginBounds.Top
            Dim line As String = Nothing

            yPos = topMargin + count * printFont.GetHeight(ev.Graphics)
            ev.Graphics.DrawString("Cod.  Nome", printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
            count = count + 2

            ' Calculate the number of lines per page.
            linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)

            While count < linesPerPage

                Do While dr_os.HasRows  ' obs nao reconhece este comando na execução
                    Do While dr_os.Read()
                        yPos = topMargin + count * printFont.GetHeight(ev.Graphics)
                        ev.Graphics.DrawString(dr_os("nroOs"), printFont, Brushes.Black, leftMargin, yPos, New StringFormat())
                        ev.Graphics.DrawString(dr_os("data"), printFont, Brushes.Black, leftMargin, yPos, New StringFormat())

                        count += 1
                    Loop
                Loop

                If Not dr_os.HasRows Then
                    Exit While
                End If

            End While

            ' If more lines exist, print another page.
            If dr_os.HasRows Then
                ev.HasMorePages = True
            Else
                ev.HasMorePages = False
            End If
        End Sub

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            connection.Open()
        End Sub
    End Class

    -- x --

    O programa dá o seguinte erro na execução: "Referência de objeto não definida para uma instância de um objeto."

    Parece que dentro da rotina "Private Sub pd_PrintPage " não está reconhecendo o dr_os (SqlDataReader) definido dentro do Button1.

    Se alguém puder me ajudar eu agradeço$.


    • Editado chinesjames quarta-feira, 19 de julho de 2017 11:14
    segunda-feira, 17 de julho de 2017 14:09

Respostas

Todas as Respostas

  • Bom dia, chinesjames.

    Tudo bem?

    Da uma olhada nesse link, veja se te ajuda:

    https://support.microsoft.com/pt-br/help/810098/bug-an-object-reference-not-set-to-an-instance-of-an-object-error-occu

    Ou nessa thread antiga:

    https://social.msdn.microsoft.com/Forums/pt-BR/c64bfa65-61fa-4d35-afae-278cb3cdff2e/referncia-de-objeto-no-definida-para-uma-instncia-de-um-objeto?forum=vsvbasicpt

    Atencisamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 18 de julho de 2017 13:38
    Moderador
  • Se a variavel já está declarada no inicio e fora do procedimento, então:

    em lugar de : Dim dr_os As SqlDataReader = cmd_os.ExecuteReader()

    coloca apenas : dr_os  = cmd_os.ExecuteReader()

    para  que variavel seja iniciada, caso contrário será iniciada a outra, embora possua o mesmo nome.

    terça-feira, 18 de julho de 2017 20:16
  • Nando Freitas agradeço pela atenção mas, 

    tentei colocar apenas: dr_os = cmd_os.ExecuteReader() e o programa fica travado...

    quinta-feira, 20 de julho de 2017 21:38
  • Bom dia, chinesjames.

    Tudo bem?

    Chegou a dar uma olhada nos links que te mandei?

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 21 de julho de 2017 14:44
    Moderador
  • Bom dia,

    Por falta de retorno essa thread está sendo encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 24 de julho de 2017 13:27
    Moderador