Base de Donnée SQL / VB -> nettoyage

BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 - 25 août 2005 à 23:35
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 - 26 août 2005 à 22:58
Salut à tous

j'utilise dans une de mes applications une base de données de type ACCES où je stocke des informations dont des images ...

lorsque j'utilise une grosse image (par exemple 5Mo) le fichier global grossi en consequence.

si je veux prendre une autre image dont la taille est inférieur (par exemple 340Ko - :) - ) le fichier global garde sa taille précédente.

mon astuce est actuellement de refaire la copie de la base dans une autre et de la remplacer (ca fonctionne)

mais :

existe t - il une facon "plus propre" de supprimer la mémoire allouée superflue ?

merci d'avance ....

bonne prog

MisterMok

3 réponses

Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
26 août 2005 à 01:10
Salut,




Oui par défaut, ACCESS ne supprime pas les fichiers temporaires (inclus
dans la base et necessaire pour un fonctionnement ponctuel) tu peux
demander à se qu'ils soient supprimer. Voir le code ci dessous :




' ===========================================

' Compacter & Archiver la base de données

Public Sub CompactJetDatabase(ByVal Location As String, _


Optional BackupOriginal As Boolean = True)

Dim strBackupFile As String

Dim strTempFile As String

On Error GoTo CompactErr

If Len(Dir(Location)) Then



'création de la copie de sauvegarde

If BackupOriginal = True Then

strBackupFile = App.path & "" & "backup.mdb"

If Len(Dir(strBackupFile)) Then Kill strBackupFile

FileCopy Location, strBackupFile

End If



'Definition de la base temporaire

strTempFile = App.path & "" & "temp.mdb"

If Len(Dir(strTempFile)) Then Kill strTempFile



'DBEngine.CompactDatabase olddb, newdb, locale, options, password


DBEngine.CompactDatabase Location, strTempFile, ";pwd=" &
dbPassWord, , ";pwd=" & dbPassWord ' Compacter la base courrante -> base temp

Kill Location ' Supprimer la base courrante

FileCopy strTempFile, Location ' Copier base tmp -> base courrante

Kill strTempFile

End If

MsgBox "La base de donnée est nettoyée", vbInformation, "Terminé"

Exit Sub

CompactErr:

MsgBox "Une erreur est apparue lors du nettoyage de la base de données", vbInformation, "Erreur détectée"

Exit Sub

End Sub



Utilisation



Call CompactJetDatabase("c:\maBase.mdb")


++

Zlub
0
BarthOlivier Messages postés 132 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 27 novembre 2012 1
26 août 2005 à 13:02
Merci pour cette info, mais j'arrive pas à la mettre en oeuvre.

Message : " Méthode ou membre de donnée introuvable "

crétion de ma base :
Dim td As TableDef
Dim db As Database
Dim i As Integer

Screen.MousePointer = vbHourglass
'Set db = CreateDatabase(nom_base, dbLangGeneral, dbVersion30)
If PASSWORD <> "" Then
Set db = CreateDatabase(nom_base, dbLangGeneral & ";pwd=" & PASSWORD, dbEncrypt)
' Set db = CreateDatabase(nom_base, dbLangGeneral & ";pwd=" & PASSWORD, dbVersion20)
Else
Set db = CreateDatabase(nom_base, dbLangGeneral, dbEncrypt)
End If

mon appel :

Call creation_base("c:\tempo.mdb")
db1.CompactDatabase "c:\tempo.mdb", "c:\wait.tmp", dbDriverNoPrompt, DATA_PWD

Est ce qu'il faut référencer un composant particulier ?

pour l'instant j'utilise uniquement DAO 3.51
j'ai crée une base en dbEncrypt et une autre en dbVersion20 mais rien ne change
J'ai bien regardé la syntaxe dans l'aide mais tout semble correct

ca doit a mon avis venir d'un mauvais référencement. Peut-tu me dire ce que j'ai oublié de mettre STP ?

MErci d'avance et merci pour ta réponse rapide .....

MisterMok
0
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
26 août 2005 à 22:58
Salut,

Et la procédure telle que je te l'ai donnée marche-t-elle ?

Sachant que DBEngine c'est inclus dans Microsoft DAO 3.6 Object Library (F2 sur DBEngine)





++



Zlub
0
Rejoignez-nous