Erreur "3343" format de base non reconnue,pour compacter une base
cs_petchy
Messages postés710Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention19 mai 2015
-
5 juin 2008 à 23:38
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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és710Date d'inscriptionjeudi 20 février 2003StatutMembreDernière intervention19 mai 20154 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)
' 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 ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)