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 :
J'ai écrit la procédure suivante de réparation et de compactage :
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 :
jro.CompactDatabase S_chaineBaseSource, S_chaineBaseCible
est exécutée, j'ai le même message d'erreur ??????????
merci d'avance pour votre aide.
Partager