[ACCESS 2007] LIMITE de Tables Ouvertes simultanément à 60 ?
C'est un problème Windows Vista lié à Access 2007.
Nous sommes migrés récemment du plateforme Windows 2000/Access 2002 XP ==> Windows Vista/Microsoft Office 2007 Access 2007 db.accdb, volume 300Mo env., avec RAM 2Go en total.
Dans la nouvelle configuration, je ne peux plus ouvrir plus que 3 gros formulaires pour saissir Clients/Produits/Commandes, Comptes chèques par exemple. En effet il me sort erreur:
"Mémoire insuffisante pour exécuter l'opération. Fermez les applications superflues, puis tentez à nouveau l'opération."
Or dans le gestionnaire des tâches, je constate
...
msaccess.exe 119 872 Ko
...
Total 40% de RAM utilisé sur 2Go.
Après cette erreur, je ne peux même ouvrir une petite table en supplément, il me sort à chaque fois le même message d'erreur.
Pour vérifier si c'est effectivement un problème au niveau Windows Vista, J'ai copié db.accdb dans une autre machine en plateforme Windows XP/Access 2007, tout marche bien.
J'ai l'impression que chaque instance d'Access est limitée à 120Mo de RAM.
Y'a-t-il effectivement une limitation de RAM par application dans Windows Vista ? et Comment l'augmenter SVP ?
[RAM] évolution 1: non à cause du RAM.
Afin de partager des expériences, je continue à poster même si je n'ai pas encore de solution.
En effet il n'est pas problème de limite de RAM: c'est une mauvaise interprétation d'ACCESS 2007 d'une erreur en message: après une journée de test, j'ai constaté que le problème se trouve dans la limite d'ouverture de tables.
En effet je ne peux toujours pas ouvrir plus de 60 tables simultanément. Alors qu'Access interprète cela comme une limite de RAM. Toutes les idées sont bienvenues.
Merci.
[RAM] évolution 2: limite de 60 tables ouvertes
J'ai testé aussi en Windows XP Pro/Access 2007: limite de tables ouvertes simultanées: 60 tables, pareil qu'en Windows Vista Pro/Access 2007. Donc c'est le problème lié à Access 2007: code erreur maintenant -1104.
Bug Microsoft Access 2007 ?
Voulez-vous tester le code dans votre DB 2007 SVP ?
Mon problème de tables ouvertes ne trouve pas encore de solution. Je me demande si vous avez le même problème.
J'ai testé ce code il me sort la limite de tables ouvertes à 61.
Pourriez-vous tester ce code et avoir la gentillesse de me donner votre réponse SVP ?
Il consiste à ouvrir au maximum les tables créées par les utilisateurs en lecutre seule, excluant les VIEW, tables système, et ensuite les fermer proprement. Il est donc neutre, non nuisible à votre DB.
Merci d'avance.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
'============= FNC001 dvlOpenCloseTablesPrompt =========================
' functions: =
' (01) open and close tables at maximum =
'=======================================================================
' method description:
' This function opens and closes tables at maximum.
' created 29-OCT-2007
' modified 29-OCT-2007
' uses:
' MsgBox()
'
' ADOX::(),CurrentProject::(),DoCmd::()
' inputs:
' none
' outputs:
' dvlOpenCloseTablesPrompt: returned function value
' locals:
' i: counter
' iTables: maximum tables index
' j: counter
'
' strTable: table name
' cat: ADOX.Catalog
' xTab: Access Object for table
' notes:
'
'=======================================================================
Function dvlOpenCloseTablesPrompt() As Long
'
' global variables:
'
'
' local variables:
'
Dim i As Long, iTables As Long, j As Long
'
Dim strTable As String
'
Dim cat As ADOX.Catalog
'
Dim xTab As AccessObject
'
' function body:
'
Set cat = New ADOX.Catalog
Set cat.ActiveConnection = CurrentProject.Connection
iTables = cat.Tables.Count - 1
'
' STEP 1: open tables:
'
On Error GoTo ErrorOpening
'
j = 0
For i = 0 To iTables
'
' open users created tables only, not view, neither system tables:
'
If (cat.Tables(i).Type = "TABLE") Then
strTable = cat.Tables(i).Name
DoCmd.OpenTable strTable, acViewNormal, acReadOnly
j = j + 1
End If
Next
'
ErrorOpening:
'
Set cat = Nothing
'
MsgBox "Number of Maximum Tables Opened: " & j & "."
'
' STEP 2: close opened tables:
'
On Error GoTo ErrorStatus
'
i = 0
'
For Each xTab In Application.CurrentData.AllTables
If (xTab.IsLoaded) Then
DoCmd.Close acDefault, xTab.Name
i = i + 1
End If
Next
'
' set function value:
'
Set xTab = Nothing
dvlOpenCloseTablesPrompt = j
Exit Function
'
ErrorStatus:
'
dvlOpenCloseTablesPrompt = 0
'
' exit the function:
'
End Function |
Fuite de mémoire RAM (Memory Leaking)
Non seulement il y a la limite très basse de tables ouvrables dans Microsoft Access 2007, la fuite de mémoire RAM (Memory Leak) est évidente durant ouverture/fermeture de tables, formulaires et aussi les états (Report) DE GRANDE TAILLE qui utilisent +10aines de tables, par exemple.
TEST: Sans ouvrir aucun objet (table, formulaire, état) au préalable, en exécutant simplement le code dans le post du [29/10/2007 12h49], 3 à 4 boucles suffisent pour que le nombre de tables ouvrables diminue: eg, 61 => 48 => 15, ...7. Il faut alors quitter Access et relancer pour continuer à travailler.
Je signale ceci pour que notre Bill adoré de nous fournir une solution au plus vite possible.