Erreur ouverture connexion base Access [Résolu]

Signaler
Messages postés
71
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
27 novembre 2017
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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

8 réponses

Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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

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à.
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
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
Messages postés
71
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
27 novembre 2017

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 !!!
Messages postés
71
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
27 novembre 2017

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
Messages postés
71
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
27 novembre 2017

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...."