Classe non enregistrée : création base Access

Signaler
Messages postés
71
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
27 novembre 2017
-
Messages postés
71
Date d'inscription
jeudi 7 juillet 2011
Statut
Membre
Dernière intervention
27 novembre 2017
-
Voila je suis en train de développé une application avec architecture n-tiers.
J'ai une solution avec un projet :
DAL
' Ajout référence : Microsoft ADO Ext. 2.8 for DDL and Security
Imports ADOX

Public Class Connexion

    'attribut chemin de la base
    Private chemin As String = My.Application.Info.DirectoryPath & "\DataBase.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 & ";" & "Jet OLEDB:Database Password="

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

    'créer la BD access
    Public Sub Create_base(mdp As String)
        Try
            Dim Cat As New Catalog
            'Erreur création base, classe non enregistrée
            Cat.Create(cnxstr & mdp & ";")
        Catch ex As Exception
            Throw New Exception("Erreur création base" & Environment.NewLine & ex.Message)
        End Try
    End Sub
End Class


IHM
'Ajout référence au projet DAL
Imports DAL


Public Class Accueil

    Dim connect As New Connexion

    Private Sub Accueil_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        If connect.verif_chemin() = False Then
            Linfo.Visible = False
        End If
    End Sub

    Private Sub Bvalider_Click(sender As Object, e As EventArgs) Handles Bsuivant.Click
        connect.Create_base(TBmdp.Text)
    End Sub
End Class


Je suivi cette article :
["http://www.developpez.net/forums/d981796/dotnet/langages/vb-net/classe-non-enregistree-ajouter-dll-projet/" http://www.developpez.net/forums/d981796/dotnet/langages/vb-net/classe-non-enregistree-ajouter-dll-projet/]

L'erreur se situe au niveau de la création de la base.
A voir également:

12 réponses

Messages postés
14811
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
24 juillet 2021
156
Bonjour,

Si tu es sur une machine 64 bite, forces la compilation en x86 (par défaut AnyCPU).

Sinon, postes le message d'erreur complet.

---------------------------------------------------------------------
[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.VisualBasic (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

Voici l'erreur qui s'affiche et j'ai bien fait comme tu me l'a conseillé NHenry, Je forme la compilation en *86
Messages postés
14811
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
24 juillet 2021
156
Bonjour,

Oups, je me suis trompé entre le E et le S, il fallait lire 64bits ... (Je note qu'il faudrait que je me relise un peu ...)

Le message ne s'affiche pas Thomasaurelien

---------------------------------------------------------------------
[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.VisualBasic (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

Bien pour la correction NHenry !
Pour ma part, j'arrive à voir le fil de la discussion avec mes messages.
Messages postés
14811
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
24 juillet 2021
156
Bonjour,

PEBKAC !!!!!
http://localhost/test/erreur.png

Il est stocké sur ta machine locale, mais pas sur un site accessible à tous, seul toi peut la voir ...

---------------------------------------------------------------------
[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.VisualBasic (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

Ouais mais comment fait-on alors pour mettre une pièce jointe ou une image ? car dans mon cas je pense qu'un image de l'erreur est plus explicite qu'un texte.

Car je viens de reprendre tous de depuis le début est là en réalisant le débogage il me signal une erreur dans l'exception en me signalant :
"Interception de COMexception" : Classe non enregistré

DAL:

Imports ADOX

Public Class Access_connexion

    'attribut chemin de la base
    Private chemin As String = My.Application.Info.DirectoryPath & "\DataBase.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 & ";" & "Jet OLEDB:Database Password="


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

    'créer la BD access
    Public Sub Create_base(mdp As String)
        Try
            Dim Cat As New Catalog
            Cat.Create(cnxstr & mdp & ";")
        Catch ex As Exception
            Throw New Exception("Erreur création base" & Environment.NewLine & ex.Message)
        End Try
    End Sub

End Class

Messages postés
14811
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
24 juillet 2021
156
Bonjour,

Recherches "hébergement image" sur Google.

Voir peut être :
http://support.microsoft.com/kb/814707
http://stackoverflow.com/questions/1496214/how-to-solve-com-exception-class-not-registered-exception-from-hresult-0x80040

Sur quelle ligne se produit l'erreur ?

---------------------------------------------------------------------
[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.VisualBasic (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

voici lien de l'erreur http://hpics.li/8553d98
Messages postés
14811
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
24 juillet 2021
156
Bonjour,

http://www.c-sharpcorner.com/Forums/Thread/47427/
https://www.microsoft.com/en-us/download/details.aspx?id=23734

Tout ce que j'ai trouvé parles de la compilation à forcer en x86.
Si Access fonctionne sur ta machine, c'est qu'il doit y avoir un loup quelque part, je n'ai pour l'instant, pas rencontré ce problème une fois la compil forcé en x86.

---------------------------------------------------------------------
[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.VisualBasic (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

En faite j'ai tous repris depuis le début. J'ai donc une solution avec 2 projet :

DAL :
'Ajout référence COM : Microsoft DAO 3.6 Library 5
Imports ADOX

Public Class AccessConnexion

#Region "Attribut"
    'chemin de la base
    Private chemin As String = My.Application.Info.DirectoryPath & "\DataBase.accdb"
#End Region
    
#Region "Fonctions"
    'renvoie chaine de connexion
    Public Function Chaine_connexion()
        Return "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & chemin
    End Function

    ' test existance base
    Public Function Verif_chemin() As Boolean
        Return System.IO.File.Exists(chemin)
    End Function

    Public Sub Creation_base()
        Try
            Dim cat As New Catalog
            cat.Create(Chaine_connexion())
        Catch ex As Exception
            Throw New Exception("Erreur création base" & Environment.NewLine & ex.Message)
        End Try
    End Sub
#End Region
End Class


IHM
'Ajout référence au projet SMILEY_DAL
Imports SMILEY_DAL

Public Class Accueil

    Dim ac As New AccessConnexion

    Private Sub Bsuivant_Click(sender As Object, e As EventArgs) Handles Bsuivant.Click
        If ac.Verif_chemin() = False Then
            MessageBox.Show(ac.Chaine_connexion())
            ac.Creation_base()
        End If
    End Sub
End Class


Voici l'erreur que j'obtiens : http://hpics.li/66b95a2

Et donc quand tu me parle de forcer la compilation en *86 c'est que pour le projet DAL ou pour chaque projet ? car j'ai déjà un peu tous essayé.

Ma config actuelle : http://hpics.li/5e9dae8
Messages postés
14811
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
24 juillet 2021
156
Bonjour,

Je dirais que c'est pour le projet qui accèdes directement à la base de données (celui qui ouvre la base).
Ensuite, je n'avais qu'un seul assembly et en forçant en x86, c'était passé, peut être que tu n'as pas le connecteur (ACE.OLEDB) d'installé.

---------------------------------------------------------------------
[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.VisualBasic (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

Bon ben tampis je m'en remet au connecteur JET.OLEDB au moins avec celui-ci cela marche très bien même si à partir de la version Access 2007 celui-ci fût remplacer par ACE.OLEDB.

Je vais continuer à chercher le pourquoi du comment ACE.OLEDB ne fonctionne pas mais je vais pouvoir en même temps continuer mon projet.

Voici au final mon projet DAL :
'Ajout référence COM : Microsoft DAO 3.6 Library 5
Imports ADOX

Public Class AccessConnexion

#Region "Attribut"
    'chemin de la base
    Private chemin As String = My.Application.Info.DirectoryPath & "\DataBase.accdb"
#End Region
    
#Region "Fonctions"

    'renvoie chaine de connexion
    Public Function Chaine_connexion()
        'ne fonctionne pas avec le connecteur ACE.OLEDB
        'permet de créer une base de donnée avec mot de passe
        Return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & chemin & ";" & ";" & "Jet OLEDB:Database Password=aaa"
    End Function

    ' test existance base
    Public Function Verif_chemin() As Boolean
        Return System.IO.File.Exists(chemin)
    End Function

    Public Sub Creation_base()
        Try
            Dim cat As New Catalog
            cat.Create(Chaine_connexion())
        Catch ex As Exception
            Throw New Exception("Erreur création base" & Environment.NewLine & ex.Message)
        End Try
    End Sub
#End Region

End Class