Erreur ouverture connexion base Access [Résolu]

thomasaurelien 71 Messages postés jeudi 7 juillet 2011Date d'inscription 27 novembre 2017 Dernière intervention - 23 avril 2012 à 17:59 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 27 avril 2012 à 23:02
Bonjour, j'ai une erreur dans ma fonction open_connection mais je ne vois pas se qui ne vas pas

Public Class AccessConnexion
    'attribut chemin de la base
    Private chemin As String = My.Application.Info.DirectoryPath & "\base.accdb"
    'Attribut connexion unique à une source de données
    Private cnx As OleDb.OleDbConnection
    'Attribut chaine de connection (fournisseur d'accès aux données + chemin)
    Private cnxstr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & chemin & ";"
    

Public Sub Open_connexion()
        Try
            'test si la connexion n'est pas déjà ouverte
            If cnx.State <> 1 Then
                cnx = New OleDb.OleDbConnection
                cnx.ConnectionString = cnxstr
                cnx.Open()
            End If
        Catch ex As Exception
        '{"Erreur d'ouverture connexion
La référence d'objet n'est pas définie à une instance d'un objet."}    
        Throw New Exception("Erreur d'ouverture connexion" & Environment.NewLine & ex.Message)
        End Try
    End Sub

End class
Afficher la suite 

8 réponses

Répondre au sujet
NHenry 14132 Messages postés vendredi 14 mars 2003Date d'inscription 21 avril 2018 Dernière intervention - 27 avril 2012 à 21:50
+3
Utile
Bonjour,

Je n'ai jamais utilisé les paramètres pour les requêtes, donc je serais bien en peine de voir la cause du pb, car ta requête SQL semble correcte.
Ne serait-ce pas un mot clé réservé qui pose pb ? (Login par exemple)

As-tu testé ta requête dans Access ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NHenry
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 27 avril 2012 à 22:28
+3
Utile
Bonjour,
De mémoire uniquement ===>> et pas sûr de moi ===>>
Il y a ici un double emploi à supprimer :
Cmd.CommandText = "INSERT INTO USER (Login, Password, Question, Reponse) VALUES (@login, @password, @question, @reponse)"


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 27 avril 2012 à 23:02
+3
Utile
Non. J'ai dit une bêtise
mais ton problème est-il finalement le même qu'ici ? ===>> Tapez le texte de l'url ici.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
Utilisateur anonyme - 23 avril 2012 à 18:26
0
Utile
Bonjour,

Quelle est la version d'Access? Le moteur Jet a été remplacé par le moteur ACE à partir d'Access 2007.

Plus d'informations par là.
Commenter la réponse de Utilisateur anonyme
NHenry 14132 Messages postés vendredi 14 mars 2003Date d'inscription 21 avril 2018 Dernière intervention - 23 avril 2012 à 19:12
0
Utile
Bonjour,

"La référence d'objet n'est pas définie à une instance d'un objet"
Indique d'une variable a pour valeur Nothing.

Dans ton cas, je suppose que c'est : cnx
Qui lors du premier passage est à Nothing.


---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualVasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
thomasaurelien 71 Messages postés jeudi 7 juillet 2011Date d'inscription 27 novembre 2017 Dernière intervention - 23 avril 2012 à 19:36
0
Utile
j'ai essayé plusieurs solutions mais aucune ne marche :
Public Class AccessConnexion
    'attribut chemin de la base
    Private chemin As String = My.Application.Info.DirectoryPath & "\base.accdb"
    'Attribut connexion unique à une source de données
    Private cnx As OleDb.OleDbConnection = Nothing
    'Attribut chaine de connection (fournisseur d'accès aux données + chemin)
    Private cnxstr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & chemin & ";"

    Public Sub Open_connexion()
        Try
            'test si la connexion n'est pas déjà ouverte
            'If cnx.State <> 1 Then
            cnx = New OleDb.OleDbConnection
            cnx.ConnectionString = cnxstr
            cnx.Open()
            'End If
        Catch ex As Exception
            Throw New Exception("Erreur d'ouverture connexion" & Environment.NewLine & ex.Message)
        End Try
    End Sub
end class


Il y a peut être un truc que je ne comprend pas !!!
Commenter la réponse de thomasaurelien
thomasaurelien 71 Messages postés jeudi 7 juillet 2011Date d'inscription 27 novembre 2017 Dernière intervention - 23 avril 2012 à 19:42
0
Utile
en faite c'est bon j'ai trouvé merci à cmarcotte et NHenry.

Public Class AccessConnexion
    'attribut chemin de la base
    Private chemin As String = My.Application.Info.DirectoryPath & "\base.accdb"
    'Attribut connexion unique à une source de données
    Private cnx As OleDb.OleDbConnection = Nothing
    'Attribut chaine de connection (fournisseur d'accès aux données + chemin)
    Private cnxstr As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & chemin & ";"

Public Sub Open_connexion()
        Try
            'test si la connexion n'est pas déjà ouverte
            'If cnx.State <> 1 Then
            cnx = New OleDb.OleDbConnection
            cnx.ConnectionString = cnxstr
            cnx.Open()
            'End If
        Catch ex As Exception
            Throw New Exception("Erreur d'ouverture connexion" & Environment.NewLine & ex.Message)
        End Try
    End Sub
end class
Commenter la réponse de thomasaurelien
thomasaurelien 71 Messages postés jeudi 7 juillet 2011Date d'inscription 27 novembre 2017 Dernière intervention - 23 avril 2012 à 22:52
0
Utile
Après avoir résolu le problème suivant, en voici un nouveau :

Voici ma classe Access User
'ajout référence vers BEL
Imports BEL

Public Class AccessUsers : Inherits AccessConnexion

    'Enregistrement de l'utilisateur dans la base
    Public Sub Ajouter(ByVal NewUser As USER)
        Dim ac As New AccessConnexion
        Dim Cmd As New OleDb.OleDbCommand
        ac.Open_connexion()
        Cmd.CommandType = CommandType.Text
        Cmd.CommandText = "INSERT INTO USER (Login, Password, Question, Reponse) VALUES (@login, @password, @question, @reponse)"
        Cmd.Parameters.AddWithValue("@login", NewUser.Login)
        Cmd.Parameters.AddWithValue("@password", NewUser.Password)
        Cmd.Parameters.AddWithValue("@question", NewUser.Question)
        Cmd.Parameters.AddWithValue("@reponse", NewUser.Reponse)
        Cmd.Connection = ac.Get_cnx()
        Cmd.ExecuteNonQuery()
    End Sub
End Class


et ma classe de connexion
' Ajout référence : Microsoft ADO Ext. 2.8 for DDL and Security

Public Class AccessConnexion
    'attribut chemin de la base
    Private chemin As String = My.Application.Info.DirectoryPath & "\base.accdb"
    'Attribut connexion unique à une source de données
    Private cnx As OleDb.OleDbConnection = Nothing
    'Attribut chaine de connection (fournisseur d'accès aux données + chemin)
    Private cnxstr As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & chemin & ";"

    'retourne vrai si le fichier (base) existe
    Public Function verif_chemin() As Boolean
        Return System.IO.File.Exists(chemin)
    End Function

    Public Sub Create_base()
        'base de donnée
        Dim db As New ADOX.Catalog
        Try
            db.Create(cnxstr)
        Catch ex As Exception
            Throw New Exception("Erreur de création de la base" & Environment.NewLine & ex.Message)
        End Try
    End Sub

    Public Sub Open_connexion()
        Try
            'test si la connexion n'est pas déjà ouverte
            'If cnx.State <> 1 Then
            cnx = New OleDb.OleDbConnection
            cnx.ConnectionString = cnxstr
            cnx.Open()
            'End If
        Catch ex As Exception
            Throw New Exception("Erreur d'ouverture connexion" & Environment.NewLine & ex.Message)
        End Try
    End Sub

    Public Sub Close_connexion()
        Try
            'test si la connexion n'est pas déjà fermer
            If cnx.State <> 0 Then
                cnx.Close()
            End If
        Catch ex As Exception
            Throw New Exception("Erreur fermeture connexion" & Environment.NewLine & ex.Message)
        End Try
    End Sub

    Function Get_cnx() As OleDb.OleDbConnection
        Return cnx
    End Function

End Class


Le problème se situe au niveau de la syntaxe cmd.commandText="INSERT INTO...."
Commenter la réponse de thomasaurelien

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.