Erreur "3343" format de base non reconnue,pour compacter une base

Signaler
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 mai 2015
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
bonsoir
voila, j'ai se code pour compacter ma base,mais j'ai toujours une erreur et il me surligne ( ligne rouge)

erreur "3343" format de base non reconnue

Private Sub cmdCompact_Click()
    Dim Fichier As FileSystemObject
    Dim DbCompactée As String
    Set Db = Nothing
    DbCompactée = App.Path & "\BD\Compact.mdb"
    Set Fichier = New FileSystemObject
    'Si le fichier de Db compactée existe déjà
    If Fichier.FileExists(DbCompactée) Then
        Fichier.DeleteFile DbCompactée
    End If
    'Compactage
    DBEngine.CompactDatabase App.Path & "\BD\centre_aéré.mdb", DbCompactée
    'Copie et restitution à l'identique
    Fichier.CopyFile DbCompactée, App.Path & "\BD\centre_aéré.mdb"
    Fichier.DeleteFile DbCompactée


End Sub
auriez vous une idée
merci
petchy

5 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
De quel type est ta DB ? (Access ? 2000, 2003, 4012, SQL Server ...)
Il faut que le moteur Jet corresponde au type de DB.
Donc bien vérifier la version Jet au regard de la version de la DB

La DB que tu veux compactée est-elle bien fermée ?

ADO est-il a jour ?
As-tu bien installé le SP6 de VB6 ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 mai 2015
3
salut
ma base est ACCESS 2003
moteur Jet 2.6
comment vérifier la version Jet au regard de la version de la DB ?

je ferme la base au moment de la compacter avec Db.Close avant
Set Db = Nothing j'avais oublier de la mettre si dessus.Mais touours le probleme

le SP6 est installer

voila ,les infos
merci
petchy
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Re
C'est surtout la définition de DBEnginequi importe.
Est-ce le même objet que Db dont tu parles ?
Il faut fermer la base, mais pas faire un = Nothing, sinon il ne pourras pas accepter de commande.

Peux-tu coller les lignes correspondant à la définition Provider / ConnectionString que tu utilises, stp

D'après une recherche rapide,  <ce lien>
J'ai beaucoup vu de lien qui parlent de JRO (qui supporte cette fonction) : c'est une piste
Exemple :
   Dim oJRO As Object
   Set oJRO = CreateObject("JRO.JetEngine")
en utilisant une référence à msjro.dll = "Microsoft Jet and Replication Objects 2.6 Library"
puis une utilisation différente de la tienne :
oJRO.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDatabasePath, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sDatabasePath & ".tmp;Jet OLEDB:Engine Type=4,uid=admin,pwd=345"
qui redéfinit le Provider pour chaque DB (utile ?)
Voilà le <lien>

Ces infos ont été trouvées en tapant ces mots dans Search.Live.com
   "access 2003" compactdatabase vb

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
710
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
19 mai 2015
3
bonjour
voila les nouvelles,j'ai changer de code pour compacter la base
j'ai repris le code de Exploreur.
et la pas de probleme il compacte bien ma base

 Public Function CompactBase(ByRef Db As ADODB.Connection, Optional iJetType As Integer = 5) As Boolean


'*********************************************************/
'    New version : 1.01                                   /
'    Référence projet à  rajouter  :                      /
'    Microsoft  Jet And Replication Objects 2.6 Library   /
'*********************************************************/
    CompactBase = False
    Dim sPathSrc As String
    Dim sPathDest As String
    Dim sPassWord As String
    Dim Jro As New JetEngine
    
      If Not (Db Is Nothing) Then
        If Not (Db.State = adStateClosed) Then
'            chemins & pass & taille source
            sTailleSrc = TailleDataBase
            sPathSrc = Db.Properties.Item(7)
            sPathDest = sPathSrc & "_" & Format(Now, "DD_MM_YYYY_HH_NN_SS") & ".mdbBAK"
            sPassWord = Db.Properties.Item(63)
   
'           on ferme la base
            Db.Cancel
            Db.Close
           
'            compactage
            On Error Resume Next
            Jro.CompactDatabase "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & sPathSrc & ";Jet OLEDB:Database Password=" & sPassWord & ";Jet OLEDB:Engine Type=" & CStr(iJetType) & ";", _
                                "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & sPathDest & ";Jet OLEDB:Database Password=" & sPassWord & ";Jet OLEDB:Engine Type=" & CStr(iJetType) & ";"
                               
'           pas d'erreur, on  renomme, on reconnecte, et retour OK
            If Err.Number = 0 Then
                On Error GoTo 0
                Kill sPathSrc
                Name sPathDest As sPathSrc
'               Nouvelle taille
               
                CompactBase = True
                Db.Open
            End If
        End If
    End If
    '   libère
    Set Jro = Nothing
   End Function

par contre j'ai un probleme pour avoir la taille de ma base
Private Sub Command2_Click()
  ' Déclaration
     Dim sMsg As String
    
    ' Definition message
     sMsg = "Taile de votre base : " & TailleDataBase & " Ko" & vbCrLf & _
           "Chemin de votre base : " & sCheminBase & vbCrLf & vbCrLf
End Sub

Public Function TailleDataBase() As Long
' nouvelle taille aprés cahque manip
  TailleDataBase = FileLen(sCheminBase) / 1024
  End Function
je ne sais pas comment indiquer le chemin
sCheminBase = ???????
car j'ai une erreur fichier introuvable
merci
petchy
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
"je ne sais pas comment indiquer le chemin" : Suffit de lui fournir l'info
Soit le chemin est déclaré dans la partie Déclaration de ton code, alors il sera disponible dans toute cette page de code,
soit il faut le redéfinir.

Exemple :
   Public Function TailleDataBase(monFichier As String) As Long
      ' nouvelle taille aprés cahque manip
      TailleDataBase = FileLen(monFichier) / 1024
   End Function

Et pour l'appeler :
   sCheminBase = "C:\mon chemin\ma database.mdb"
   sMsg = "Taile de votre base : " & TailleDataBase(sCheminBase) & " ko" & vbCrLf & _
           "Chemin de votre base : " & sCheminBase & vbCrLf & vbCrLf

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)