1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

ERRO em VB.net

Discussão em 'Programação' iniciada por Farmit, 9 de Abril de 2008. (Respostas: 9; Visualizações: 1734)

  1. Farmit

    Farmit Power Member

    Boas ,
    eu tenho um erro na aplicação que nao consigo emendar :005::

    -tenho um formulario de inserção de dados que seram enviados numa aplicação de access (*.mdb).

    -O problema é que quando carrego no butão (btn_inserir) do formulario de inserção (frm_inserir) , aparece este errro :


    An unhandled exception of type 'System.InvalidOperationException' occurred in system.data.dll

    Additional information: The 'Microsoft.jet.4.0' provider is not registered on the local machine.

    Eu ja pesquisei na net para ver qual é o tipo de erro que ocorre quando esta mensagem aparece , e o que aparece é isto:

    You get this error when running your application:
    Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
    Solution

    Install the Microsoft Jet Engine on your system. The Microsoft Jet engine is used by Iron Speed Designer to communicate with its internal Microsoft Access database. Review the following links to download the latest version of the Microsoft Jet 4.0 Database Engine.

    Mas este nao parece ser o meu caso , porque eu ja tinha a ultima versão ....

    Portanto preceso de ajuda para resolver este problema

    OBG
     
  2. dElpH!

    dElpH! 1st Folding then Sex

    Faz o Download do ultimo MDAC e tenta novamente , já agora se poderes mete o codigo para vermos melhor :)

    Cumprimentos
     
  3. Farmit

    Farmit Power Member

    A tal mensagem de erro que aparecia antes ja nao aparece outra vez , descubri que era apenas um erro de sintaxe no codigo do Provider.
    Mas mesmo assim continuo a ter um erro , mas nao aparece nenhuma informação adicional :
    An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll -> apenas isto

    A class onde tenho o erro é esta :

    Código:
    Imports System.Data
    Imports System.Data.OleDb
    ------------------------------------------------------------------------------------------------------
    Public Class Bdaccess
        Private _Con As OleDbConnection
        Private _Erro As Boolean
        Private Const _Strcom = "Provider=Microsoft.jet.oledb.4.0;Data source="c:\BD_projecto\projecto.mdb"
        Private _StrSql As String
        Private _Cmd As OleDbCommand
    ------------------------------------------------------------------------------------------------------
        Public Sub New(ByVal mdb As String)
            Me._Con = New OleDbConnection(Bdaccess._Strcom + mdb)
            Me._Erro = False
        End Sub
    
    -------------------------------------------------------------------------------------------------------
    Public Sub abrir()
            Me._Erro = False
            Try
                Me._Con.Open()
            Catch ex As Exception
                Me._Erro = True
            End Try
        End Sub
    ------------------------------------------------------------------------------------------------------
        Public Sub Fechar()
            Me._Erro = False
            Try
                Me._Con.Close()
            Catch ex As Exception
                Me._Erro = True
            End Try
        End Sub
    -------------------------------------------------------------------------------------------------------
        Public ReadOnly Property erro() As Boolean
            Get
                Return Me._Erro
            End Get
        End Property
    --------------------------------------------------------------------------------------------------------
       Public Property StrSql() As String
            Get
                Return Me._StrSql
            End Get
            Set(ByVal value As String)
                Me._StrSql = value
            End Set
        End Property
    -------------------------------------------------------------------------------------------------------
        Public Function Executar() As OleDbDataReader
            Me._Erro = False
            Try
                Me._Cmd = New OleDbCommand(Me._StrSql, Me._Con)
                Me._Cmd.CommandType = CommandType.Text
                If Me._Con.State = ConnectionState.Open Then
                    Me._Con.Close()
                End If
                [COLOR=White][COLOR=YellowGreen][COLOR=Red]Me._con.Open()[/COLOR] [/COLOR][/COLOR]---------------> ERRO
            Me._cmd.ExecuteNonQuery()
            Me._con.Close()
                
           
        End Function[COLOR=White]

    Nao faço a minima onde esta o erro
    [/COLOR]
     
    Última edição pelo moderador: 12 de Abril de 2008
  4. Farmit

    Farmit Power Member

    ok , eu acho que o prblema esta mesmo aqui

    vejam se o esta query está certo:


    Código:
    If (tbx_nome.Text <> "") Then
                If (Me._expcodigopostal.EValido(tbx_postal.Text) Or tbx_postal.Text = "") Then
                    Me._bd.strsql = "insert into contactos (bi,nome,apelido,tipo_relacao,tipo_contacto,sexo,idade,data_nascimento,morada,cod_postal,email,telemovel,contribuinte,observacoes) values(" + _
                    tbx_bi.Text + "," + _
                    "'" + tbx_nome.Text + "'" + "," + _
                    "'" + tbx_apelido.Text + "'" + "," + _
                    "'" + tbx_relacao.Text + "'" + "," + _
                    "'" + tbx_contacto.Text + "'" + "," + _
                    "'" + tbx_sexo.Text + "'" + "," + _
                    tbx_idade.Text + "," + _
                    "'#" + tbx_nascimento.Text + "#'" + "," + _
                    "'" + tbx_morada.Text + "'" + "," + _
                    "'" + tbx_postal.Text + "'" + "," + _
                    "'" + tbx_email.Text + "'" + "," + _
                    "'" + tbx_telemovel.Text + "'" + "," + _
                    "'" + tbx_contribuinte.Text + "'" + "," + _
                    "'" + tbx_observacao.Text + "'" + ")"
    se alguma coisa estiver errado avisem -me sfv
     
    Última edição pelo moderador: 12 de Abril de 2008
  5. SFSS

    SFSS Power Member

    Boas,

    acho que a melhor forma é adicionar Parâmetros ao OLEDB_Command. Vais ver que não ficas com essa mistura toda de caixas de texto, "+" / "," / "&", etc.

    Fazes assim:

    [Comando OLEDB]

    Dim _Com as New OLEDB_Command("INSERT INTO tab_xpto(xpto1,xpto2,xpto3) VALUES(@xpto1,@xpto2,@xpto3)",_Con)

    [Parametros]
    _Cmd.Parameters.Add(New OLEDB.Parameter("@xpto1",txt_xpto1.text))
    _Cmd.Parameters.Add(New OLEDB.Parameter("@xpto2",txt_xpto2.text))
    _Cmd.Parameters.Add(New OLEDB.Parameter("@xpto3",txt_xpto3.text))

    [Enviar Comando + Parâmetros p/Base de Dados]

    _Con.Open
    _Com.ExecuteNonQuery
    _Con.Close

    Vê lá se te safas com esta ajuda. ;)

    Cumps
     
  6. mOrSa

    mOrSa Power Member

    E fazeres isto?

    Código:
    Try
    _Con.Open
    _Com.ExecuteNonQuery
    _Con.Close
     
    Catch ex As Exception
        MessageBox(ex.Message) 'ou este
        MessageBox(ex.InnerException) 'ou este
    End Try
    Pode ser que ajude. Mais ainda, sempre que faças uma conexão a uma BD usa o try catch. Evita, quase sempre, que o software estoire e fazes também um controlo de erros. Muito importante!

    1abraço!
     
  7. jpaulino

    jpaulino Power Member

    Porque não utilizas um stringbuilder para organizar o sql statement ? Assim é complicado analisar.
     
  8. SFSS

    SFSS Power Member

    Ok. Também serve!
    Então para ser mais completo o exemplo adiciona isto no catch.

    If Not IsNothing(_Con) Then
    If _Con.State = Data.ConnectionState.Open Then _Con.Close
    _Con = Nothing
    End If


    Cumps
     
    Última edição: 11 de Abril de 2008
  9. mOrSa

    mOrSa Power Member

    Só uma nota: se estás a usar OLEDB os parâmetros têm que ser adicionados pela ordem que estão na query! Estive umas horas com esse stress :P

    1Abraço!
     
  10. Farmit

    Farmit Power Member

    Sim , antes eu tinha a cena do catch em comentario , e era por causa disso que fiquem mais que uma hora a tentar encontar o erro , mas quando tirem o catch do comentario , o programa deixou de ter erros :D :

    Public Sub ExecutarNonQuery()
    Me._Erro = False
    Try
    Me._Cmd = New OleDbCommand(Me._StrSql, Me._Con)
    Me._Cmd.CommandType = CommandType.Text
    If Me._Con.State = ConnectionState.Open Then
    Me._Con.Close()
    End If
    Me._Con.Open()
    Me._Cmd.ExecuteNonQuery()
    Me._Con.Close()
    Catch ex As Exception
    Me._Erro = True
    End Try
    End Sub
     

Partilhar esta Página