none
ERRO ACCESSVIOLATIONEXCEPTION AS UNHANDLED .NET RRS feed

  • Pergunta

  • Boa noite Pessoal...

    Estou com um problema que esta me matando...

    Consegui desenvolver um código (com muita pesquisa na internet) para exportar os dados do DataGridView em PDF porem o meu gridview ele inicia com algumas informações e eu tenho combobox como filtros e também um datatimer para filtrar datas, até ai tudo bem...

    o problema é que quando eu inicio o form e clico em exportar, ele exporta tudo certinho os dados do datagridview, a unica coisa que não sai corretamente é os números que estão negativos, ele sai como se fosse inteiros...

    só que quando eu uso o filtro e ele altera os dados no datagridview ele da o erro System.AccessViolationException was unhandled

    alguém ja passou por isso?

    abaixo o código que estou usando 

       

      Private Function relatorioPDF() As DataTable
            Dim dt As New DataTable("Divergencia")

                
            Dim dataColumn_0 As New DataColumn(DgvLancamento.Columns(0).HeaderText.ToString(), GetType(String))
            dt.Columns.Add(dataColumn_0)
            Dim dataColumn_1 As New DataColumn(DgvLancamento.Columns(1).HeaderText.ToString(), GetType(String))
            dt.Columns.Add(dataColumn_1)
            Dim dataColumn_2 As New DataColumn(DgvLancamento.Columns(2).HeaderText.ToString(), GetType(String))
            dt.Columns.Add(dataColumn_2)
            Dim dataColumn_3 As New DataColumn(DgvLancamento.Columns(3).HeaderText.ToString(), GetType(String))
            dt.Columns.Add(dataColumn_3)
            Dim dataColumn_4 As New DataColumn(DgvLancamento.Columns(4).HeaderText.ToString(), GetType(String))
            dt.Columns.Add(dataColumn_4)
            Dim dataColumn_5 As New DataColumn(DgvLancamento.Columns(5).HeaderText.ToString(), GetType(String))
            dt.Columns.Add(dataColumn_5)
            Dim dataColumn_6 As New DataColumn(DgvLancamento.Columns(6).HeaderText.ToString(), GetType(String))
            dt.Columns.Add(dataColumn_6)
            Dim dataColumn_7 As New DataColumn(DgvLancamento.Columns(7).HeaderText.ToString(), GetType(String))
            dt.Columns.Add(dataColumn_7)
            Dim dataColumn_8 As New DataColumn(DgvLancamento.Columns(8).HeaderText.ToString(), GetType(String))
            dt.Columns.Add(dataColumn_8)

            Try
                ' Adicionando as linhas(rows) 
                Dim dataRow As DataRow
                For i As Integer = 0 To DgvLancamento.Rows.Count - 1
                    dataRow = dt.NewRow()
                    dataRow(DgvLancamento.Columns(0).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(0).Value.ToString()
                    dataRow(DgvLancamento.Columns(1).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(1).Value.ToString()
                    dataRow(DgvLancamento.Columns(2).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(2).Value.ToString()
                    dataRow(DgvLancamento.Columns(3).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(3).Value.ToString()
                    dataRow(DgvLancamento.Columns(4).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(4).Value.ToString()
                    dataRow(DgvLancamento.Columns(5).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(5).Value.ToString()
                    dataRow(DgvLancamento.Columns(6).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(6).Value.ToString()
                    dataRow(DgvLancamento.Columns(7).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(7).Value.ToString()
                    dataRow(DgvLancamento.Columns(8).HeaderText.ToString()) = DgvLancamento.Rows(i).Cells(8).Value.ToString()

                    dt.Rows.Add(dataRow)
                Next
                dt.AcceptChanges()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return dt
        End Function

        Private Sub criarPDF()
            Dim caminho As String

            Dim salvarComo As SaveFileDialog = New SaveFileDialog()
            caminho = DialogResult.ToString
            Dim Arquivo As String

            Dim DataHoje As String = CStr(DateTime.Now)

            DataHoje = Replace(CStr(DataHoje), "/", "-")
            DataHoje = Replace(CStr(DataHoje), ":", "-")
            DataHoje = Replace(CStr(DataHoje), " ", "-")

            salvarComo.CheckFileExists = False
            salvarComo.Title = "Controle de Divergencias"
            salvarComo.Filter = "Arquivos Pdf |*.pdf"
            salvarComo.FileName = "Controle de Divergencias_" & DataHoje
        caminho = salvarComo.ShowDialog.ToString                     <---- Aqui Ocorre o Erro


    Douglas Antunes



    • Editado DouglasAntunes sexta-feira, 29 de janeiro de 2016 22:04 Erro Português
    sexta-feira, 29 de janeiro de 2016 21:59

Respostas

  • Bom dia Douglas,

    Analisei o seu código e ele me parece correto.

    Utilize essa outra maneira para exportar do VB para o Excel e me diga se o resultado foi diferente.

    Note: Primeiramente adicione a referencia do Office na sua biblioteca.

    	
    
    Private Sub Export_Button_Click(ByVal sender As System.Object, ByVal e As 
    System.EventArgs) Handles VIEW_Button.Click
    
        Dim xlApp As Microsoft.Office.Interop.Excel.Application
        Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
        Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
        Dim misValue As Object = System.Reflection.Missing.Value
        Dim i As Integer
        Dim j As Integer
    
        xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass
        xlWorkBook = xlApp.Workbooks.Add(misValue)
        xlWorkSheet = xlWorkBook.Sheets("sheet1")
    
    
        For i = 0 To DataGridView1.RowCount - 2
            For j = 0 To DataGridView1.ColumnCount - 1
                For k As Integer = 1 To DataGridView1.Columns.Count
                    xlWorkSheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText
                    xlWorkSheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString()
                Next
            Next
        Next
    
        xlWorkSheet.SaveAs("D:\vbexcel.xlsx")
        xlWorkBook.Close()
        xlApp.Quit()
    
        releaseObject(xlApp)
        releaseObject(xlWorkBook)
        releaseObject(xlWorkSheet)
    
        MsgBox("You can find the file D:\vbexcel.xlsx")
    End Sub
    
    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub
    
    

    Atenciosamente, Roberto Alves

    • Marcado como Resposta Marcos SJ quarta-feira, 3 de fevereiro de 2016 13:24
    quarta-feira, 3 de fevereiro de 2016 13:13

Todas as Respostas

  • Bom dia DouglasAntunes,

    Tudo bem?

    Esta é a mensagem completa de erro?

    Atenciosamente


    Marcos SJ

    Esse conteúdo e 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, 1 de fevereiro de 2016 11:48
  • Bom dia Marcos

    Sim essa é a mensagem completa do erro

    Voce teria alguma dica pra me dar?

    Ja pesquiseie não achei nada relevante 

    Obrigado!


    Douglas Antunes

    segunda-feira, 1 de fevereiro de 2016 12:10
  • Olá DouglasAntunes,

    tudo bem?

    Tendo como base que no que você informou que  "System.AccessViolationException was unhandled" foi a única informação que o sistema apresentou em absoluto, seguem alguns links que talvez possam ser úteis:

    Link 01

    Link 02

    Link 03

    Link 04

    Link 05

    Link 06

    Atenciosamente


    Marcos SJ

    Esse conteúdo e 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, 1 de fevereiro de 2016 12:43
  • Boa tarde Amigão...

    Ainda não consegui resolver..

    to querendo mudar o Código de exportação..

    lembrando que o erro só ocorre quando eu altero os dados do datagridview, se eu abrir o formulário e ja clicar no botão exportar ele gera a exportação em PDF normalmente, isso que é estranho 

    será que meu código esta entrando em conflito com o DataGrid?

    Valeu amigão!


    Douglas Antunes


    • Editado DouglasAntunes terça-feira, 2 de fevereiro de 2016 17:35 Erro de Portugues
    terça-feira, 2 de fevereiro de 2016 17:34
  • Bom dia Douglas,

    Analisei o seu código e ele me parece correto.

    Utilize essa outra maneira para exportar do VB para o Excel e me diga se o resultado foi diferente.

    Note: Primeiramente adicione a referencia do Office na sua biblioteca.

    	
    
    Private Sub Export_Button_Click(ByVal sender As System.Object, ByVal e As 
    System.EventArgs) Handles VIEW_Button.Click
    
        Dim xlApp As Microsoft.Office.Interop.Excel.Application
        Dim xlWorkBook As Microsoft.Office.Interop.Excel.Workbook
        Dim xlWorkSheet As Microsoft.Office.Interop.Excel.Worksheet
        Dim misValue As Object = System.Reflection.Missing.Value
        Dim i As Integer
        Dim j As Integer
    
        xlApp = New Microsoft.Office.Interop.Excel.ApplicationClass
        xlWorkBook = xlApp.Workbooks.Add(misValue)
        xlWorkSheet = xlWorkBook.Sheets("sheet1")
    
    
        For i = 0 To DataGridView1.RowCount - 2
            For j = 0 To DataGridView1.ColumnCount - 1
                For k As Integer = 1 To DataGridView1.Columns.Count
                    xlWorkSheet.Cells(1, k) = DataGridView1.Columns(k - 1).HeaderText
                    xlWorkSheet.Cells(i + 2, j + 1) = DataGridView1(j, i).Value.ToString()
                Next
            Next
        Next
    
        xlWorkSheet.SaveAs("D:\vbexcel.xlsx")
        xlWorkBook.Close()
        xlApp.Quit()
    
        releaseObject(xlApp)
        releaseObject(xlWorkBook)
        releaseObject(xlWorkSheet)
    
        MsgBox("You can find the file D:\vbexcel.xlsx")
    End Sub
    
    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub
    
    

    Atenciosamente, Roberto Alves

    • Marcado como Resposta Marcos SJ quarta-feira, 3 de fevereiro de 2016 13:24
    quarta-feira, 3 de fevereiro de 2016 13:13