Bonjour,

J'essaye de réparer et compacter une base de données access version 2003 en utilisant une interface VB6.
J'ai ajouté les référence suivante à mon projet :

stdole2.tlb#OLE Automation
msado20.tlb#Microsoft ActiveX Data Objects 2.0 Library
msjro.dll#Microsoft Jet and Replication Objects 2.6 Library

J'ai aussi déclaré une variable :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Dim jro As jro.JetEngine
J'ai écrit la procédure suivante de réparation et de compactage :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Private Sub CompactDatabaseAccess2(PS_toutesBases As String)
 
Const S_provider As String = "Provider=Microsoft.Jet.OLEDB.2.6;" 
Const S_engine As String = "Jet OLEDB:Engine Type=3"
Dim S_chaineBaseSource As String    'Nom de la base de données à réparer et compacter
Dim S_chaineBaseCible As String     'Nom de la base de données après réparation et compactage
Dim s_erreur As String
 
 
  If PS_toutesBases = "" Then
      'Si la base de données n'existe pas
        MsgBox "aucune base n'est spécifiée"
   Else
      'si la base de données existe
 
      'créer le nom temporaire de la base de données compactée
      S_chaineBaseSource = PS_toutesBases
      S_nomBaseTemp = Left(S_chaineBaseSource, (Len(S_chaineBaseSource) - 4))
      S_nomBaseTemp = S_nomBaseTemp + "TempABA" + ".mdb"
      S_chaineBaseCible = S_nomBaseTemp
 
        If Dir(S_chaineBaseCible) <> "" Then
         'si le nom temporaire de la base de données compactée existe
             MsgBox "nom base cible existe déjà"
 
        Else
 
             S_chaineBaseSource = S_provider + "Data Source=" + S_chaineBaseSource '+ ";" 
             S_chaineBaseCible = S_provider + "Data Source=" + S_chaineBaseCible + ";" + S_engine 
 
             Err.Clear
             Set jro = New jro.JetEngine
             On Error GoTo erreurCompactage
             'compacter la base de données
                 On Error GoTo erreurjro
                 jro.CompactDatabase S_chaineBaseSource, S_chaineBaseCible
 
                 'supprimer la base de données source
                 Kill PS_toutesBases
 
 
                  'donner le nom de la base de données source à la base de données compactée
 
                  Name S_nomBaseTemp As PS_toutesBases
 
                  Set jro = Nothing
 
          End If  'fin si Dir(S_chaineBaseCible) <> ""
 
    End If 'fin si Dir(PS_toutesBases= ""
 
    Exit Sub
 
 
erreurCompactage:
s_erreur = "erreur, compactage" + vbCr + "numerreur : " + Str(Err.Number) + vbCr + Err.Description + vbCr + "la source : " + Err.Source
MsgBox "erreur, compactage" + vbCr + "numerreur : " + Str(Err.Number) + vbCr + Err.Description + vbCr + "la source : " + Err.Source
Exit Sub
 
 
erreurjro:
s_erreur = "erreur, jro compactage" + vbCr + "numerreur : " + Str(Err.Number) + vbCr + Err.Description + vbCr + "la source : " + Err.Source
MsgBox "erreur jro compactage" + vbCr + "numerreur : " + Str(Err.Number) + vbCr + Err.Description + vbCr + "la source : " + Err.Source
Exit Sub
 
End Sub

cependant à chaque exécution j'ai l'erreur suivante :

numerreur : -2147221164
description : Classe non enregistrée
la source : Microsoft OLE DB Service Components




en sachant que la chaîne source S_chaineBaseSource contient :

Provider=Microsoft.Jet.OLEDB.2.6;Data Source=C:\sourcevb\basesAccessTest\basetest.mdb
et la chaîne cible S_chaineBaseCible contient :

Provider=Microsoft.Jet.OLEDB.2.6;Data Source=C:\sourcevb\basesAccessTest\basetestTempABA.mdb;Jet OLEDB:Engine Type=3
pouvez-vous m'expliquer d'où vient l'erreur. A chaque fois que l'instruction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
jro.CompactDatabase S_chaineBaseSource, S_chaineBaseCible
est exécutée, j'ai le même message d'erreur ??????????
merci d'avance pour votre aide.