IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

[ACCESS 2007] LIMITE de Tables Ouvertes simultanément à 60 ?


Sujet :

Access

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut [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 ?

  2. #2
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut [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.

  3. #3
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    taper sur 60tables en même temps meme sur une grosse DB, je trouve que ca fait beaucoup. je dis p-e une grosse connerie mais aggréger plusieurs tables via des vues et taper sur ces vues ne pourrait pas etre une solution de contournement?

    (je te deplace dans le forum office. ainsi les experts access auront une meilleure visibilité de ton probleme )

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Merci LGM.

    J'ai ouvert simultanément 60 tables directement afin de tester la limite. Et le nombre déclenchant l'erreur semble fixe quelque soit le nombre de champs, ou de taille de tables.

    En revanche, dans les formulaires de saissie, les tables sont implicitement ouvertes en tant que ComboBox.RowSource, par examples, tables des clients, des produits, des pays, etc. J'ai programmé VBA en luxe sous Access 2002 XP/Windows 2000, comme cela n'a pas généré d'erreurs.

    En effet ce que je ne comprends pas, c'est que la limite de tables ouvertes (open table) est de 2048, les 60 que j'ouvre sont loin de la limite d'Access.

  5. #5
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut [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 ?

  6. #6
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Pourquoi utilises-tu un ADOX.Catalog avec Access 2007 pour ouvrir les tables d'un projet ACCDB ?

    Argy

  8. #8
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    J'utilise ADOX.Catalog au lieu de CurrentDB.TableDefs, parce que DAO.TableDefs disparaîtrait un jour, or ADOX est dans la même famille que ADO qui est lui préféré de Bill Gates.

    En effet ils ont la même fonction, et c'est vrai que ADOX.Catalog est beaucoup plus lent que CurrentDB.TableDefs.

    Qu'en penses-tu ?

  9. #9
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    CurrentDB.TableDefs, parce que DAO.TableDefs disparaîtrait un jour
    Ah oui ? Un jour ? Pour ma part, je n'ai pas encore eu écho de cette nouvelle.
    Modoteurs et Modoteuses, pouvez-vous confirmer ?

    Bref, si j'allais dans cette direction, je pourais penser qu'Access suivrait le même chemin. En attendant, le but du jeu est de faire fonctionner ton appli, non ? Un développement est aussi fait pour évoluer avec les nouvelles technologies. Access 2007 utilise toujours cet objet et poutant, la bibliothèque DAO n'est plus la même.

    Disons que pour être, humm, plus pragmatique, j'aurais essayé la routine avec la collection TableDefs, ne serait-ce pour vérifier que je ne rencontre pas le même problème.

    Maintenant, pour en revenir au sujet initial, es-tu certain que tes 3 gros formulaires sont fondés sur des requêtes optimisées ?
    E puis d'autres questions qui me viennent...
    - N'utilises-tu pas de fonctions de domaine dans tes requêtes (ou ailleurs) ?
    - Fermes-tu et libères-tu correctement tes objets tels que tes Recordset...
    - N'ouvre-tu pas de connexions superfues ?
    - ...

    Si ton projet est si gros que cela, envisage alors une migration vers une plate forme SQL server.

    Argy

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par argyronet Voir le message
    Ah oui ? Un jour ? Pour ma part, je n'ai pas encore eu écho de cette nouvelle.
    Modoteurs et Modoteuses, pouvez-vous confirmer ?

    Argy
    D'accord avec toi, du point de vue compatibilité, je ne vois MS abandonné DAO. Ne pas créer de nouvelles fonctions Oui, mais pas l'enlever d'Access.

    Starec

  11. #11
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Merci à argyronet:

    Citation Envoyé par argyronet Voir le message
    j'aurais essayé la routine avec la collection TableDefs, ne serait-ce pour vérifier que je ne rencontre pas le même problème.
    OK, j'ai testé ceci en DAO qui donne le même résultat 61 tables au maximum:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    '============= FNC001 dvlOpenCloseTablesPromptDao ======================
    ' functions:                                                           =
    '   (01) open and close tables at maximum                              =
    '=======================================================================
    ' method description:
    '   This function opens and closes tables at maximum.
    ' created  30-OCT-2007
    ' modified 30-OCT-2007
    ' uses:
    '   MsgBox()
    '
    '   Application::(),DAO::(),DoCmd::()
    ' inputs:
    '   none
    ' outputs:
    '   dvlOpenCloseTablesPromptDao: returned function value
    ' locals:
    '   i: counter
    '   iTables: maximum tables index
    '   j: counter
    '
    '   strTable: table name
    '
    '   strTablesOpened: array of opened tables
    '
    '   db: DAO.Database
    '   tdf: DAO.TableDef
    '
    ' notes:
    '
    '=======================================================================
    Function dvlOpenCloseTablesPromptDao() As Long
    '
    ' global variables:
    '
     
    '
    ' local variables:
    '
      Dim i As Long, iTables As Long, j As Long
    '
      Dim strTable As String
    '
      Dim strTablesOpened() As String
    '
      Dim db As DAO.Database
    '
      Dim tdf As DAO.TableDef
    '
    ' function body:
    '
      Set db = Application.CurrentDb
    '
      i = db.TableDefs.Count
    '
      If (i > 0) Then
        i = i - 1
        ReDim strTablesOpened(i)
      End If
    '
    ' STEP 1: open tables:
    '
      On Error GoTo ErrorOpening
    '
      j = 0
      For Each tdf In db.TableDefs
        '
        ' open users created tables only, not view, neither system tables:
        '
        If ((tdf.Attributes And dbSystemObject) = 0) Then
          strTable = tdf.Name
          DoCmd.OpenTable strTable, acViewNormal, acReadOnly
          strTablesOpened(j) = strTable
          j = j + 1
        End If
      Next
    '
    ErrorOpening:
    '
    ' close DAO objects:
    '
      Set tdf = Nothing
      Set db = Nothing
    '
      MsgBox "Number of Maximum Tables Opened: " & j & "."
    '
    ' STEP 2: close opened tables:
    '
      On Error GoTo ErrorStatus
    '
      iTables = j - 1
      For i = 0 To iTables
        DoCmd.Close acDefault, strTablesOpened(i)
      Next
    '
    ' set function value:
    '
      dvlOpenCloseTablesPromptDao = j
      Exit Function
    '
    ErrorStatus:
    '
      dvlOpenCloseTablesPromptDao = 0
    '
    ' exit the function:
    '
    End Function
    J'ai aussi ouvert des tables en double-cliquant sur elles, 61 tables au maximum .

  12. #12
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par argyronet
    Maintenant, pour en revenir au sujet initial, es-tu certain que tes 3 gros formulaires sont fondés sur des requêtes optimisées ?
    Certainement non, par example, j'ai mis sur un enregistrement d'un client/fournisseur que j'appelle formulaire humain, il a les sous-formulaires produits, commandes, horaires d'ouverture de leur service, leur marques de produits... Tous ouverts en même temps (Access 2000 ou inférieur le permettait sans aucun problème).


    Citation Envoyé par argyronet
    - N'utilises-tu pas de fonctions de domaine dans tes requêtes (ou ailleurs) ?
    Oui, probablement à vérifier.

    Citation Envoyé par argyronet
    - Fermes-tu et libères-tu correctement tes objets tels que tes Recordset...
    Oui, avec Recordset.close et set rst=nothing.

    Citation Envoyé par argyronet
    - N'ouvre-tu pas de connexions superfues ?
    NON.

    Citation Envoyé par argyronet
    Si ton projet est si gros que cela, envisage alors une migration vers une plate forme SQL server.
    Je suis un peu dans le commerce avec 18 000 produits, bientôt 20 000. 2000 marques, 10 000 membres humains, parmi eux clients et fournisseurs et autres. Je ne sais pas si mon projet est gros ou petit.

    Techniquement, ça fait un fichier de 300 Mo compacté, 200taine de tables pour les localisations des noms de produits en langues différentes, en catégories différentes, etc.

    Est-il nécessaire de migrer vers SQL serveur ?

    Access me fait les factures, Bon de commandes, BL etc. il est dans un seul fichier et pratique.

    J'ai songé à migrer vers SQL, mais il est tellement cher... Le chef ne veut pas dépenser plus de sous pour l'instant. En effet combien ça coûte à ce propos ?

  13. #13
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par Starec Voir le message
    Ne pas créer de nouvelles fonctions Oui, mais pas l'enlever d'Access.
    Je suis tout à fait de ton avis.

    Vu mon problème, je me pose aussi la question s'il y a un virus quelque part dans mon système. Pourtant on a installé Norton 2007 en due forme.

  14. #14
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Virus... Non, je ne pense pas qu'un quidam serait assez crétin pour envisager de consacrer du temps à développer un virus visant à limiter ce que tu soulignes...

    Considérant que théoriquement, Access est capable d'ouvrir 2048 tables qu'elles soient liées ou non, ce nombre de 2048 décroit en fonction des tables internes exploitées par l'application... Mais j'ai un gros doute sur cette théorie car il s'avère que 63 est le nombre maximum de tables ouvrables...
    Au delà, l'erreur 2364 est levée (Microsoft Office Access ne peut pas ouvrir la table en mode Feuille de données.).
    Mes investigations ont relevées ce comportement avec Access 2003 SP1 n'ayant pas 2007 sous la main.

    Bref... en revenant à ton problème initial,
    Citation Envoyé par Jacou
    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:
    je suppose que l'un des formulaires doit faire une itération et provoque l'erreur...

    Pose alors un mouchard quelque part, susceptible de t'indiquer où ça pioche.
    Note au passage que Access 2007 n'exploite pas DAO 3.6 par défaut mais un composant propriétaire de la version MS Office 12 Data Engine Object Library.

    As-tu déjà essayé avec la librairie 3.6 ou bien tes essais s'avèrent renvoyer les mêmes erreurs avec l'une ou l'autre librairie ?

    Argy

  15. #15
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    argyronet, merci de ton intervention.

    Tu me sembles confirmer la limite de tables ouvertes à 60taine ?

    Mon problème s'empire, depuis l'installation de l'imprimante LASER CANON LBP 3000 qu'il y a quelques jours.

    car maintenant, même si j'ouvre un seul formulaire, eg, frmInputHuman, je n'arrive plus a ouvrir via le code, comme d'habitute, l'état de carte de visite des clients (Report). Bref, le total désaroi.

    Et pour les factures, l'entête de société, qui est elle dans un sous-état, ne s'affiche plus non plus, erreur:

    2277: Erreur pendant l'initialisation des polices.

    Je suppose que Bill GATES utilise des tables internes pour initialiser les polices pour l'impression ?

    Et je ferme le formulaire frmInputHuman, l'état s'affiche correctement.
    Mais après quelques ouvertures/fermetures du même état, aucun état ne peut plus s'afficher, il n'y a plus de mémoire. Je constate:

    Une fuite de mémoire RAM (Memory Leak) avec ouverture de tables, formulaires et aussi les états (Report).

    Oui je ferme à chaque fois les tables, formulaires et états correctement.

    Je penserais qu'il y a probablement un gros bug dans la libération de mémoire dans Microsoft Access 2007.

    Et surtout, tous les états avec sous-états (subreport) ont du mal à s'afficher.

  16. #16
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Et tu confirmes que ton appli est parfaitement opérationnelle sous XP/2000-2003 ?

    Argy

  17. #17
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par argyronet Voir le message
    Virus... Non, je ne pense pas qu'un quidam serait assez crétin pour envisager de consacrer du temps à développer un virus visant à limiter ce que tu soulignes...
    En effet notre anti-virus est mis à jour tous les jours automatiquement, et puis j'ai fait faire plusieurs analyses générales, Norton n'a trouvé aucun virus.

    Citation Envoyé par argyronet Voir le message
    je suppose que l'un des formulaires doit faire une itération et provoque l'erreur...
    J'utilise DEBUGGEUR VBA, j'ai suivi pas à pas les exécutions, l'itération n'a pas lieu.

    Citation Envoyé par argyronet Voir le message
    Access 2007 n'exploite pas DAO 3.6 par défaut mais un composant propriétaire de la version MS Office 12 Data Engine Object Library.
    Je n'ai pas encore testé de changer version DAO.

  18. #18
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par argyronet Voir le message
    Et tu confirmes que ton appli est parfaitement opérationnelle sous XP/2000-2003 ?

    Argy
    Oui, en effet nous utilisons sans problème depuis l'année 1998 Access (version ?) pour la gestion, et avons évolué avec toutes les versions de Microsoft Access. Je note qu'à chaque fois on ajoute des fonctions nouvelles: un sous-formulaire par-ci, un sous-état par-là, qui alourdiraient l'application.

  19. #19
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Points : 151
    Points
    151
    Par défaut 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.

  20. #20
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Que donne cet appel de procédure Test() chez toi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Option Compare Database
    Option Explicit
     
    Const MAX_OPEN = 63
     
    Sub Test()
    Dim oDB As DAO.Database
    Dim oTD As DAO.TableDef
    Dim oFD As DAO.Field
    Dim T As Integer
    Dim strTableName As String
    Dim strFieldName As String
    Dim Tentative As Integer
     
      For Tentative = 1 To MAX_OPEN
     
        On Error Resume Next
        For T = 1 To MAX_OPEN
          strTableName = "Table" & Format(T, "000")
          DoCmd.Close acTable, strTableName
          DoEvents
          DoCmd.DeleteObject acTable, strTableName
        Next
        On Error GoTo 0
     
        RefreshDatabaseWindow
     
     
        On Error GoTo Test_Error
        Set oDB = CurrentDb
     
        For T = 1 To MAX_OPEN
          strTableName = "Table" & Format(T, "000")
          strFieldName = "Field" & Format(T, "000")
          Set oTD = oDB.CreateTableDef(strTableName)
          With oTD
            Set oFD = oTD.CreateField(strFieldName, dbText, 50)
            .Fields.Append oFD
          End With
     
          With oDB
            .TableDefs.Append oTD
          End With
     
          RefreshDatabaseWindow
        Next
     
        oDB.Close
     
        Set oFD = Nothing
        Set oTD = Nothing
        Set oDB = Nothing
     
        DoEvents
     
        Call OpenTables
     
      Next Tentative
     
      On Error GoTo 0
     
    Test_Exit:
      Exit Sub
     
    Test_Error:
      MsgBox "Error " & Err.Number & " (" & Err.Description & ") !"
      Resume Test_Exit
     
    End Sub
     
    Sub OpenTables()
    Dim T As Integer
    Dim strTableName As String
     
        For T = 1 To MAX_OPEN
          strTableName = "Table" & Format(T, "000")
          DoCmd.OpenTable strTableName, acViewNormal, acEdit
        Next
     
        For T = 1 To MAX_OPEN
          strTableName = "Table" & Format(T, "000")
          DoCmd.Close acTable, strTableName
        Next
     
    End Sub
    Moi, je n'ai pas de fuite de mémoire : je passe de 49676 à 51604 jusqu'à 51800 mais ça se stabilise.
    En revanche, la procédure OpenTables() ne marche qu'une seule fois : au second appel de la boucle, j'ai une erreur 3001.



    Ce qui me surprend autant que ça m'embête, c'est que cette procédure marche parfaitement bien et 63 fois sur Access 2000.

    J'ai essayé avec Access 2007 DAO v.12 et DAO 3.6 en vain.

    Note:
    La procédure Test() sans l'appel OpenTables() marche très bien et 63 fois comme le demande la boucle et sans problème de RAM.
    Une fois les tables créées avec ou sans qu'Access ait été quitté (pour la forme), la procédure seule OpenTables() ne donne pas plus de succès.


    Le pire est que si je tente d'ouvrir une table depuis le volet, le message suivant apparaît :



    Ce sujet étant sérieux, je veux bien qu'un modo de s'y intéresse aussi...

    Avant d'enflammer Microsoft sur un éventuel bug, faisons d'abord des essais entre nous.

    Argy

Discussions similaires

  1. Dans Access 2007, lier des tables de SQL Server en VBA
    Par milou_puce dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/04/2013, 09h08
  2. Réponses: 14
    Dernier message: 11/06/2008, 09h21
  3. Obtenir la liste des tables dans Access 2007
    Par je_developpe dans le forum Access
    Réponses: 2
    Dernier message: 13/03/2007, 05h16
  4. [Access] Suppression de plusieurs tables en simultané
    Par clad523 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/11/2006, 22h48
  5. [Access] Insérer dans plusieurs tables simultanément
    Par coolkis dans le forum Bases de données
    Réponses: 5
    Dernier message: 22/03/2005, 15h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo