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

cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 - 5 juin 2008 à 23:38
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 8 juin 2008 à 23:23
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

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juin 2008 à 00:04
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)
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
6 juin 2008 à 08:40
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
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juin 2008 à 12:21
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)
cs_petchy Messages postés 710 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 19 mai 2015 4
7 juin 2008 à 20:19
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 juin 2008 à 23:23
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)
Rejoignez-nous