Database building error : classe non enregistrée [Résolu]

Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
-
Bonjour,
j'ai une appli qui, lors de son lancement, crée un petit fichier ophtalmo.accdb (via une fonction) dans le rep "mes documents" de ma station si le fichier n'existe pas.

Voila un morceau de la sub :
 Public Function CreateAccessDatabase(ByVal DatabaseFullPath As String) As Boolean
        Dim cat As New ADOX.Catalog()
        Dim tbl1 As New ADOX.Table
        Dim tbl2 As New ADOX.Table
        Try
            cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BddPath & "\Ophtalmo.accdb")
            ' Création de la table Praticiens
            With tbl1
                .Name = "Praticiens"
                ' le seul champ de cette table
                .Columns.Append("Praticien", ADOX.DataTypeEnum.adVarWChar, 50)
            End With
            cat.Tables.Append(tbl1)

            ' Création de la table Consultations
            With tbl2
                .Name = "Consultations"
                ' les champs de la BDD 
                .Columns.Append("praticien", ADOX.DataTypeEnum.adVarWChar, 50)
                .Columns.Append("day", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("nom", ADOX.DataTypeEnum.adVarWChar, 50)
                .Columns.Append("prenom", ADOX.DataTypeEnum.adVarWChar, 50)
                .Columns.Append("naissance", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("age", ADOX.DataTypeEnum.adVarWChar, 3)
                .Columns.Append("oeil", ADOX.DataTypeEnum.adVarWChar, 2)
                .Columns.Append("S", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("C", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("Axe", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("sc", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("cc", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("ac", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("dva", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("add", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("nva", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("K1", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("K2", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("QI", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("Pachy", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("ACD", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("AL", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("AD", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("Pseudophake", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("Pupilmeso", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("Pupilphoto", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("Pupilmax", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("SL", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("QL", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("Q1et2", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("Epsilon", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("QT", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("Qideal", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("QF", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("deltaQ", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("KIMAGE", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("TS", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("relift", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("version", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("flagimage", ADOX.DataTypeEnum.adVarWChar, 1)
                .Columns.Append("qileft", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("qiright", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("deltaqi", ADOX.DataTypeEnum.adVarWChar, 10)
                .Columns.Append("qefficient", ADOX.DataTypeEnum.adVarWChar, 10)
            End With
            cat.Tables.Append(tbl2)
            Return True

        Catch Excep As System.Runtime.InteropServices.COMException
            messageaff = "Database building Error : " & Excep.Message
            infoaff = "Information"
            MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
            Return False
        Finally
            cat = Nothing
        End Try
    End Function


Je rencontre le souci suivant depuis ce matin, après test sur une nouvelle station equipée vs2012

Je n'ai donc pas le ophtalmo.accdb dans "mes documents"

lorsque le fonction tente de le créer, j'ai :
Database building error - classe non enregistrée

Comment ce fait il d'après vous ?

Je précise que les références suivantes sont ok
- Microsoft ADO Ext. 2.8 for DDL and Security
- Microsoft Office 14.0 Object Library
- Microsoft.Office.Interop.Excel
- Microsoft.VisualBasic.PowerPacks.Vs

et pour les espaces de noms, ADOX est bien présent aussi

Je n'ai aucune erreur de build en F5
Merci

--
Afficher la suite 

11 réponses

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
46
0
Merci
Salut

 cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BddPath & "\Ophtalmo.accdb")


BddPath ? ce n'est pas plutot DatabaseFullPath
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
0
Merci
ben cela a toujours fonctionne avec bddpath

--
cs_ShayW
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
46 -
alors à quoi sert
ByVal DatabaseFullPath As String
?
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
0
Merci
ben si je fais
cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DatabaseFullPath & "\Ophtalmo.accdb"


j'ai exactement la même erreur

sur l'ancienne machine qui fonctionnait, la seule différence était que j'avais office 2013 et non office 2010

--
0
Merci
DatabaseFullPath et BddPath sont quoi ?
les chemins des fichiers .accdb je suppose !

pose un point d'arrêt sur cat.Create("Provider=Microsoft.AC etc..... et regarde ce que valent ces deux variables
0
Merci
regarde aussi si les appels à cette fonction sont bien faits !
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
46
0
Merci
mets un point d'arret à la ligne
Public Function CreateAccessDatabase

et ensuite continue pas à pas F8 et dis à quelle ligne il y a un catch ?
0
Merci
Provider=Microsoft.ACE.OLEDB.12.0

Les providers sont pas les mêmes selon Office 2010 et Office 2013 je crois !
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
0
Merci
Bonjour Galain

C'est bien le provider que j'avais initialement. Il fonctionnait sur 2010 et sur 2013.

Si je mets un point d'arrêt sur cat.Create("Provider=Microsoft.AC ... bddpath me donne ""C:\Users\moncompte\Documents" donc "mes documents" et le cat.create me donne "+ ADOX._Catalog {ADOX._Catalog} ADOX._Catalog"






--
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
0
Merci
re shayw,

si je procede comme tu dis, c'est
 cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BddPath & "\Ophtalmo.accdb")
qui est catchée et me renvoie directement sur
        Catch Excep As System.Runtime.InteropServices.COMException


Les détails ici :
http://img853.imageshack.us/img853/5121/h4ih.jpg

merci
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
0
Merci
par contre je viens de m'apercevoir d'une chose bizarre
une ancienne version fonctionnelle et compilée me fait pareil sur cette station et fonctionne parfaitement bien sur une autre ..... me demande si y'aurait pas un souci entre vs2012 et une ancienne version qui aurait été mal désinstallée ......


--
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
0
Merci
Bon ben on dirait bien que c'est un "chicorage" de versions VS
Je viens de remettre VS2012 sur une station "vierge" et plus de souci. VS c'est bien mais que de soucis a la desinstallation

En tout cas merci a vous pour l'aide :)