Une table qui se vide mais qui ne libère pas la mémoire

Résolu
lkm Messages postés 43 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 23 novembre 2007 - 27 août 2005 à 13:16
lkm Messages postés 43 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 23 novembre 2007 - 27 août 2005 à 14:43
Bonjour,
Je suis en train de réaliser un moteur de recherche sur une base de donnée assez conséquente (il y a plusieurs tables qui ont environ 5000 enregistrements). Pour cela je jongle sur 2 tables que je rempli ou vide par le code. Le moteur de recherche est quasiment fini mais je viens de découvrir à ma grande stupeur que lorsque je vide une de mes tables, celle-ci ne libère pas de la mémoire (la taille du fichier access reste le même) alors que lorsque je la rempli le fichier access augmente de taille.
ça me rend fou parce que à la base je pensais que j'oubliais un set nothing mais pas du tout. Je peux absolument pas négliger le problème parce qu'au bout de quelques recherche, le fichier a quasiment doublé .
Voici le code:

Private Sub init_ttemp(val As Integer)
Dim Mito As DAO.Recordset
if val <> 0 Then
Set Mito = Db.OpenRecordset("SELECT * FROM T_TempRecherche")
Else
Set Mito = Db.OpenRecordset("SELECT * FROM T_TempRecherche2")
End If
If Not Mito.EOF Then
While Not Mito.EOF
Mito.Delete
Mito.MoveNext
Wend
End If
Mito.Close: Set Mito = Nothing
End Sub

Au cours de mes investigations je me suis lancé vers autre chose:
Private Sub init_ttemp(val As Integer)
If val <> 0 Then
CurrentDb.Execute ("DELETE * FROM T_TempRecherche")
Else
CurrentDb.Execute ("DELETE * FROM T_TempRecherche2")
End If
End Sub

pour ce code là, je n'ai pas encore observé d'augmentation de la taille du fichier, mais pas de diminution non plus lorsque j'affectue le vidage d'une des tables.

Est ce que quelqu'un à la solution à mon problème? J'ai hate de savoir pourquoi ça fait ça.
Merci d'avance.
lkm

1 réponse

lkm Messages postés 43 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 23 novembre 2007
27 août 2005 à 14:43
Excusez moi de vous avoir importuné chers amis, En faisant des recherches appronfondies sur ce site j'ai décelé mon problème et je l'ai résolu.


Le problème vient du fait qu'il faut compacter la base de donnée (encore un petit tour de bill) parce que les objets recordset restent toujours en mémoire même si à la fin de leur utilisation on met set record : nothing. Lorsque l'on execute cette action, une sorte de pointeur se met à TRUE pour dire qu'il ne sert plus mais il existe toujours physiquement.


voici la source qui m'a permi de résoudre mon problème: http://www.vbfrance.com/code.aspx?id=4920
mais il y en a de nombreuses autres sur le site. A bientôt

lkm
3
Rejoignez-nous