Recherche…


Introduction

Lorsque vous recevez une erreur: «Microsoft Access a rencontré un problème et doit fermer», il existe souvent peu d'informations pour vous aider à identifier la cause de l'erreur. Vous trouverez ci-dessous une série d'étapes à suivre pour résoudre la cause des erreurs.

Remarques

Assurez-vous de supprimer d’autres variables de l’équation pendant le test.

La corruption du réseau

Ne chargez pas le client hors d'un réseau. Placez-le sur le lecteur local et lancez-le à partir de là.

Bâtiments d'entreprise

Si vous travaillez dans un environnement d'entreprise utilisant des "builds informatiques" et que vous n'avez pas réussi à décomposer, tester la mémoire ni supprimer les données binaires, refusez de faire des tests supplémentaires jusqu'à ce que l'équipe informatique puisse fournir à l'utilisateur uniquement Windows, Office et Service Packs installés.

Tous les logiciels et toutes les mises à jour doivent être installés à la main sans utiliser des installations sans surveillance. N'installez pas d'antivirus sur cette machine pour les tester.

Comprenez que de nombreux services informatiques essaient simplement d’adopter une approche One-Size-Fits-All avec les builds et que leurs builds sont tous basés les uns sur les autres. Au fil du temps, les conflits logiciels peuvent directement entraîner un blocage ou un comportement étrange.

Mauvais pouvoir

Comme mentionné dans l'exemple de la mémoire, les fluctuations de l'alimentation peuvent provoquer des erreurs informatiques. Si la base de données se trouve dans un bâtiment industriel, essayez de mettre la main sur un conditionneur d'alimentation ou un onduleur qui fournit une alimentation propre (hors batterie, pas hors tension en passant par une varistance en oxyde métallique).

Vérifiez également le câble d’alimentation qui se branche sur la barre d’alimentation ou la prise secteur. Assurez-vous que les spécifications de jauge et de tension sont suffisantes. Les services informatiques laissent souvent les câbles d'alimentation branchés à la station et retirent simplement la machine. Après de nombreuses années, ils utilisent des blocs d'alimentation plus robustes, mais n'ont pas éteint le câble. Cela fait une différence. En cas de doute, apportez un nouveau câble plus épais.

Décompiler la base de données

Cela devrait toujours être votre solution initiale. Une bonne politique consiste à décompiler la base de données avant chaque version.

  1. Créez un raccourci décompilé . Cela charge la base de données avec un commutateur "/ decompile".

    1. Cliquez avec le bouton droit sur votre fichier de base de données. Sélectionnez Copier
    2. Clic droit dans la fenêtre de l'explorateur et sélectionnez "Coller le raccourci"
    3. Clic droit sur le raccourci et sélectionnez "Propriétés"
    4. Dans la zone Cible, allez à la fin de la ligne et ajoutez /decompile
    5. Cliquez sur OK pour fermer le raccourci
  2. Ouvrez la base de données avec Shift.
    Maintenez la touche Maj enfoncée tout en double-cliquant sur ce raccourci. Cela empêche toute exécution automatique de s'exécuter dans la base de données. Vous devriez aller directement à la fenêtre de navigation.

  3. Compacter et réparer la base de données. Une fois la base de données chargée, vous devrez cliquer sur le bouton Compact and Repair.

    1. Recherchez le bouton Compacter et réparer la base de données sur le ruban Outils .
    2. Maintenez la touche Maj enfoncée. Continuez à le maintenir enfoncé pendant que vous cliquez sur le bouton Compact and Repair .
  4. Recompiler la base de données

    1. Aller dans la fenêtre VBA (Contrôle + G)
    2. Sélectionnez Debug -> Compiler à partir du menu

C'est le processus de décompilation complet. En général, cela devrait permettre de réparer 99% de tous les plantages d’accès ou comportements étranges.

Tester la mémoire de l'ordinateur

Si vos accidents sont aléatoires ou sporadiques, faites cette étape. Si vos pannes se produisent chaque fois que vous exécutez la base de données, cette étape ne résoudra pas le problème (bien qu'une mauvaise mémoire puisse être la raison de la corruption).

Utilisez un testeur de mémoire qui démarre en dehors du système d'exploitation et exécute plusieurs passes. Deux choix populaires sont MemTest86 (Commercial) et MemTest86 + (Open Source)

Commencez le test et laissez-le fonctionner pendant les heures de travail. La raison en est que d'autres facteurs dans le bâtiment, tels que le bruit sur les circuits d'alimentation, peuvent provoquer des erreurs de mémoire. Vous devez donc essayer de conserver les mêmes variables.

Si vous avez des erreurs de mémoire, vous devrez identifier si cela est dû à une mauvaise mémoire de l'ordinateur ou à un autre facteur. Cela dépasse toutefois le cadre de ce document.

Supprimer les données binaires du formulaire

Parfois, les accidents se produisent constamment sous une forme ou un rapport unique, ou ne se produisent que lors de l'impression. Il est possible que les données binaires du formulaire / rapport soient corrompues.

Enregistrer l'objet Form / Report sous forme de texte Il existe deux fonctions non documentées. Application.SaveAsText et Application.LoadFromText. Vous pouvez utiliser ces fonctions pour exporter les définitions de formulaire / rapport, nettoyer la définition, puis l'importer à nouveau.

  1. Faites une sauvegarde de votre base de données avant de poursuivre
  2. Aller à la fenêtre VBA Immédiat (Contrôle + G)
  3. Tapez Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt" (remplacez MyForm par le nom du formulaire / rapport. Utilisez acReport s'il s'agit d'un rapport endommagé que vous corrigez)
  4. Renommez l'élément de formulaire d'origine (par exemple, renommer MyForm.Bak) dans la fenêtre de la base de données

Nettoyer le fichier de définitions de formulaire / rapport

  1. Ouvrez le fichier exporté (par exemple MyForm.txt) dans le Bloc-notes

  2. Supprimer la ligne "Checksum =" (doit être sur la ligne 3)

  3. Effacer les données binaires

    1. Identifiez les blocs de données binaires. Parcourez le fichier et vous verrez les lignes commençant par "Parameter = Begin". Après ces lignes, vous aurez des lignes de données binaires codées. Enfin, le bloc binaire se terminera par une ligne composée uniquement de "End". Le bloc de données binaires comprend la première ligne (avec l'instruction Begin) et toutes les lignes allant jusqu'à la dernière ligne (avec l'instruction End).

      Remarque: Tous ces blocs doivent apparaître AVANT vos définitions de contrôle de formulaire

    2. Supprimez les blocs de données binaires pour les paramètres suivants:

      • NameMap
      • PrtMip
      • PrtDevMode
      • PrtDevNames
      • PrtDevModeW
      • PrtDevNamesW
  4. Recherchez d'autres problèmes. Lorsque le fichier est ouvert, faites défiler le reste du fichier et recherchez tout ce qui attire votre attention, en particulier dans le code du module VBA en bas. Vous chercherez tout ce qui sort du lot, et peut-être la corruption.

  5. Enregistrez le fichier.

Chargez le formulaire / rapport dans Access et Test

  1. Rechargez le formulaire dans Access.
    • Dans Access, accédez à la fenêtre immédiate (Control + G)
    • Tapez Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"
    • Decompile / Compact Repair / Recompile (Voir l'autre exemple dans la documentation)
    • Ouvrez le formulaire / rapport à tester. Espérons que tout fonctionne maintenant.
    • Supprimer l'ancien formulaire corrompu (par exemple, MyForm.bak)

Prévenir cette corruption à l'avenir

La cause la plus courante de données binaires endommagées dans un rapport / formulaire est lorsque plusieurs ordinateurs / utilisateurs utilisent le même fichier client de base de données au lieu d'avoir leur propre copie distincte. C'est pourquoi chaque utilisateur doit avoir son propre fichier client sur son bureau qu'il exécute.

Supprimer les champs "Objet OLE"

Si vous avez des images ou d'autres données stockées dans Access lui-même en tant qu'objets OLE, vous devriez alors trouver une meilleure approche. Lorsque les données OLE sont stockées, elles sont stockées conformément au logiciel (et à la version du logiciel) de l'ordinateur qui les stocke. Lorsqu'un autre ordinateur va afficher ces données d'objet OLE sur le formulaire, mais que le logiciel / la version exact n'est pas installé, cela se traduit souvent par un blocage d'application.

Si vous stockez des données d'image, une meilleure approche consiste à stocker le nom de fichier et à enregistrer les images à un emplacement standard. Les versions les plus récentes d’accès ont les contrôles natifs pour faire cela.

Reconstruire la base de données entière

C'est beaucoup de travail, faites-le en dernier recours après avoir épuisé toutes les autres options. Vous devez le faire uniquement si le problème se produit pour différents utilisateurs, sur des ordinateurs différents. S'il ne se produit pas pour tous les utilisateurs, il est fort probable que ce ne soit pas un conteneur de base de données corrompu.

Comme pour la procédure de suppression des données binaires, vous allez reconstruire votre base de données à partir de zéro. Ce processus est un peu rituel, mais s'il est fait méticuleusement avec le souci de ne pas "préserver" une éventuelle corruption, le processus est très efficace.

Créez un nouveau conteneur de base de données d'accès.

  • Dans Access, sous l'onglet Fichier, vous pouvez sélectionner "Nouveau". Créez une nouvelle base de données vide au format ACCDB.

Déplacer tous les objets vers le nouveau conteneur

N'utilisez pas les fonctions d'importation / exportation dans Access pour déplacer les objets, et ne cliquez pas simplement sur un objet. Cela peut copier les éléments corrompus sur le nouveau conteneur.

Les tables:

  • Pour chaque table de l'ancien conteneur d'accès, créez une nouvelle table dans le nouveau conteneur.
  • Dans la vue de conception, copiez / collez les définitions de champ.
  • Vérifiez les propriétés de la table pour vous assurer qu'elles correspondent dans les deux bases de données
  • Déplacez toutes les macros de données aussi (voir la section Macros pour savoir comment procéder)
  • Pour déplacer les données, exportez les anciennes données vers XML ou CSV, puis importez-les à partir de ce format.

Requêtes:

  • Chargez chaque requête dans la vue SQL.
  • Copiez / collez le texte SQL.
  • Coller dans la nouvelle base de données.
  • Comparez les propriétés de requête pour vous assurer qu'elles correspondent.

Formulaires / Rapports:

  • Pour chaque formulaire / rapport, utilisez la fonction Application.SaveAsText pour exporter les formulaires / rapports dans un fichier texte.
  • Supprimez les données binaires (voir Suppression des données binaires de la documentation du formulaire pour vous familiariser avec ce processus)
  • Utilisez la fonction Application.LoadFromText pour réimporter les objets dans la nouvelle base de données

Macros

Vous avez trois méthodes pour déplacer les macros.

  1. Recréez chaque macro manuellement dans le nouveau conteneur de base de données.
  2. Utilisez la méthode Application.SaveAsText / Application.LoadFromText avec le paramètre acMacro .
  3. Copier / coller les définitions de macro pour chaque macro
    • Sélectionnez Tout (Contrôle + A) pour sélectionner tous les éléments de macro. Puis copiez (Contrôle + C).
    • Ouvrez un document Bloc-notes vierge et collez (Contrôle + V) le fichier Macro XML.
    • Créez une nouvelle macro vide dans le nouveau conteneur de base de données.
    • Dans le Bloc-notes, sélectionnez Tout le texte (Contrôle + A). Ensuite, copiez (Contrôle + C)
    • Dans la macro vide, coller (Contrôle + V). La macro devrait apparaître. Sauvegarde le.

Modules

  • Pour chaque module, sélectionnez tout le code (Control + A) et collez (Control + V) dans le nouveau conteneur de base de données.
  • Assurez-vous de vérifier les propriétés de la base de données (dans la fenêtre VBA, allez dans Outils -> Propriétés du client)

Macros de données

Pour chaque macro de données, utilisez les méthodes SaveAsText / LoadFromText.

  1. Aller dans la fenêtre VBA Immédiat (Contrôle + G)
  2. Tapez Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt" (remplacez MyTableName par le nom de la table contenant les macros de données)
  3. Examiner le fichier pour tout signe de corruption
  4. Dans le nouveau conteneur de base de données, chargez la définition à l'aide de Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"

Comme mentionné précédemment, c'est beaucoup de travail, mais il a des résultats. Cette méthode doit également être utilisée lors de la migration d'une base de données Access 97 vers 2000 ou d'une base de données Access 2000 vers 2003.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow