Erreur ouverture connexion base Access

Résolu
thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017 - 23 avril 2012 à 17:59
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 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

8 réponses

NHenry Messages postés 15001 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 octobre 2022 158
27 avril 2012 à 21:50
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
27 avril 2012 à 22:28
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
27 avril 2012 à 23:02
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
3
Utilisateur anonyme
23 avril 2012 à 18:26
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à.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15001 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 6 octobre 2022 158
23 avril 2012 à 19:12
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
0
thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017
23 avril 2012 à 19:36
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 !!!
0
thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017
23 avril 2012 à 19:42
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
0
thomasaurelien Messages postés 71 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 27 novembre 2017
23 avril 2012 à 22:52
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...."
0