Appli DAO 3.6 qui 'gonfle'

phil F - 30 juil. 2001 à 12:30
yomm Messages postés 515 Date d'inscription dimanche 17 février 2002 Statut Membre Dernière intervention 10 mars 2008 - 26 août 2003 à 12:21
Voila, j'ai un gros gros problème qui
devient Urgentissime.

en résumé:
Je doit historiser des données dans une basse
access et les purger sans discontinuer.
Mon appli toute simple gonfle en mémoire... et fini
par planter quand il n'y en a plus, au bout d'une 60aine
d'heures.

en détail:

j'ai un petit code de test qui met le 'gonflage'
en évidence:
testé sous Win95, Win-NT et Win 2000 et... ça gonfle
et ne libère rien.

j'ai tenté plusieurs contournements (passer par ODBC,
ADO, etc... ; ne pas refermer la base, la refermer,
ouvrir ou non une transaction, stocker les requêtes dans la base etc...) RIEN n'y fait.

Le code suivant est celui qui bouffe la mémoire le moins
vite (version DAO3.51, en fermant tout bien)

* La base: "base.mdb", créée avec access 97.
-1 seule table "table1" avec 1 champ numérique "champ"
et c'est tout.

* Le code: en VB6 sp4.
1 form, avec 1 timer , interval=1000 ms
projet= projet exe standard + "DAO 3.6" cochée
dans les références
(et c'est tout)

Const dbbName = "Base.mdb" 'in app.path
Dim dbb As Database 'la base
Dim w As Workspace  'sera en fait workspaces(0)
Dim cptr As Double  'signe de vie...

Private Sub Timer1_Timer()

    Set w = Workspaces(0)
    Set dbb = w.OpenDatabase(App.Path & "" & dbbName)

    dbb.Execute "INSERT into Table1 ([Champ]) VALUES (0)"
  
    dbb.Execute "DELETE * FROM Table1"
    dbb.Close
    Set dbb = Nothing
    
    cptr = cptr + 1
    Me.Caption = cptr
End Sub

3 réponses

si ton codes est si simple tu devrais passer par un fichiers texte et puis apres si tu doit traiter les donnée faire un programme ou une fonction separée qui renvoie le fichiers texte vers une base de donnée car Access et VB ne son pas spécialement stable dans la gestion de la memoire !!!
0
Non, mon code n'est pas si simple ;) C'est juste le bout
de code qui met le bugg en évidence, qui est simple (la base est tout de même plutôt simplette).

Non, je ne passe pas par un fichier texte: j'ai essayé sur un fichier binaire (random), on peut, mais c'est excessivement trop lent.

Non, je ne tente pas de créer mon propre sgdb ;)
je cherche seulement le moyen de contourner ce bugg
en utilisant les outils Jet (ou n'importe quoi d'autre qui marche) et Dao (même remarque)

3 questions pour résumer:

- Qu'est-ce qui fait gonfler la mémoire dans le bout de soft ci-dessus ? y'a aucun record-set stocké, y'a même pas l'ombre d'un SELECT, toutes les références sont libérées
(set à nothing)

- Comment en libérer ? option qui va bien genre nopage, no memory :-) ...

- J'ai rien vu dans une Faq quelconque. Suis-je le seul
à ne pas aimer les trucs qui plantent :-) ?

--
phil
0
yomm Messages postés 515 Date d'inscription dimanche 17 février 2002 Statut Membre Dernière intervention 10 mars 2008 3
26 août 2003 à 12:21
essai de rajouter

w.close 'car 1) ton n'est jamais fermé
set w = nothing '2) histoire de libérer un la mémoire

histoire du purger également ton workspace de la mémoire
0
Rejoignez-nous