web-dev-qa-db-fra.com

Comment décompiler et recompiler une application de base de données?

J'ai une application de base de données Access et je voudrais savoir comment la décompiler et la recompiler.

réponse acceptée est génial, mais il est un peu difficile de créer un raccourci pour chaque base de données.

Vous pouvez l'enregistrer en tant que module PowerShell.

#for use with MSAccess 2010

Function Decompile-AccessDB{
    param ([string]$dbFileName)

    [string]$argument = '"' + $dbFileName + '"' + "/Decompile"
    Start-Process -FilePath 'C:\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE' -ArgumentList $argument
}

Ensuite, appelez-le comme ceci:

Decompile-AccessDB -Path "C:\Path\to\some.accdb"

Cela vous permet de décompiler rapidement et facilement any db à partir de la ligne de commande Power Shell.

Notez que vous devez toujours maintenir la touche Maj enfoncée lorsque vous l'exécutez pour contourner le démarrage de l'application.

9
RubberDuck

Pour décompiler une base de données Access, vous devez créer un raccourci avec les éléments suivants:

  1. Chemin d'accès à l'exécutable MS Access (MSACESS.exe)
  2. Chemin d'accès à la base de données que vous souhaitez décompiler
  3. L'indicateur/decompile

Dans l'ensemble, le raccourci ressemblerait à ceci:

"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "C:\users\tim\documents\Mydatabase.mdb" /decompile

De toute évidence, les chemins d'accès seront différents sur votre système.

Je vous recommande de faire une sauvegarde de votre base de données avant d'exécuter cette commande.

Si vous avez un code de démarrage dans votre base de données, vous devez maintenir la touche Maj enfoncée pour contourner l'exécution du code de démarrage.

Une fois la base de données ouverte, vous pouvez compacter et réparer la base de données pour garantir des performances optimales.

Après le compactage et la réparation, vous pouvez recompiler le code VBA en ouvrant n'importe quel module et en utilisant le Debug Compile [DatabaseName] commande.

Si c'est quelque chose que vous voulez faire fréquemment, vous pouvez créer un raccourci "Access Decompile" dans votre menu SendTo. Une fois que vous avez ce raccourci dans le menu SendTo, vous pourrez cliquer avec le bouton droit sur n'importe quelle base de données Access et sélectionner "Envoyer vers -> Décompiler Access", ce qui est beaucoup plus facile que d'avoir à créer un raccourci vers la base de données spécifique.

Suivez ces étapes pour personnaliser le menu Envoyer vers avec un raccourci de décompilation d'accès

  1. Créez un raccourci vers l'exécutable Access.
  2. Ajoutez l'indicateur/decompile dans la cible pour le raccourci. Le raccourci ressemblera à ceci:

    "C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" /decompile

  3. Ouvrez l'Explorateur Windows et collez ce qui suit dans la barre d'adresse:

    %APPDATA%\Microsoft\Windows\SendTo

  4. Copiez le raccourci que vous avez créé dans le dossier SendTo.

  5. Le raccourci de décompilation d'accès sera désormais disponible.

Pour appeler le raccourci Access Decompile, faites un clic droit sur une base de données Access dans l'Explorateur Windows et sélectionnez "Envoyer vers -> Access Decompile". Veillez à maintenir la touche Maj enfoncée pour contourner tout code de démarrage dans la base de données.

45
Tim Lentine

Les instructions pratiques de @Tim Lentine sont bonnes, mais il laisse de côté les étapes réellement nécessaires pour qu'une décompilation en vaille la peine:

  1. sauvegarder votre base de données.

  2. compactez votre base de données.

  3. en utilisant le raccourci créé avec les instructions de Tim, ouvrez votre base de données.

  4. fermez cette instance d'Access.

  5. ouvrez une nouvelle instance d'Access et ouvrez la base de données que vous venez de décompiler, mais assurez-vous de contourner tout le code de démarrage (c.-à-d., maintenez la touche Maj enfoncée). Si vous ne le faites pas, vous pouvez également revenir à l'étape 3 et réessayer, car si le code de démarrage s'exécute, votre code sera recompilé avant que vous ne soyez prêt à le faire.

  6. compactez la base de données décompilée (et assurez-vous que vous maintenez la touche Maj enfoncée afin qu'elle contourne le code de démarrage; voir # 5).

  7. ouvrez le VBE et dans le menu Debug, choisissez COMPILE [nom du projet].

  8. dans le menu fichier, enregistrez le projet.

  9. compact à nouveau.

Pourquoi toutes ces étapes sont-elles nécessaires?

Parce que vous voulez non seulement décompiler le VBA, vous voulez vous assurer que toutes les pages de données où le code p compilé a été stocké sont complètement supprimées avant de recompiler.

Je recommande également:

  1. dans les options VBE, désactivez COMPILE ON DEMAND

  2. dans le VBE, ajoutez le bouton COMPILE à votre barre d'outils.

  3. compilez souvent avec ce bouton dans la barre d'outils, après toutes les deux ou trois lignes de code.

La décompilation n'est pas quelque chose que vous devez utiliser tout le temps, mais pendant le codage intensif, je pourrais faire une décompilation plusieurs fois par jour. Et je décompile/recompile généralement comme la dernière étape avant de publier une application en utilisation de production.

Enfin, lisez article de Michael Kaplan sur le sujet pour mieux le comprendre.

37
David-W-Fenton

J'ai écrit un script VBS pour automatiser le processus de décompilation. Il est stupide que Microsoft n'ait pas intégré cela dans Access, étant donné que c'est une nécessité lors du développement d'applications lourdes VBA.

Le script localise MSACCESS.exe et exécute Access avec l'indicateur de décompilation sur une base de données située dans le répertoire parent du script, dont le nom est donné dans le code.

Option Explicit
Dim MSAccPath
Dim RegKey
Dim WSHShell
Dim currentDirectory

' Get MSACCESS.exe directory
RegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\" _
    & "CurrentVersion\App Paths\MSACCESS.EXE\Path"
Set WSHShell = WScript.CreateObject("WScript.Shell")

' Get parent directory
MSAccPath = WSHShell.RegRead(RegKey)
currentDirectory = WSHShell.CurrentDirectory

' Decompile
WSHShell.Run Chr(34) & MSAccPath & "MSACCESS.EXE" & Chr(34) & " " & Chr(34) & currentDirectory & "\..\testdb.accdb" & Chr(34) & " /decompile"

' Clear Shell var
Set WSHShell = Nothing

Collez simplement ce texte dans un document avec un .vbs extension et double-cliquez dessus pour l'exécuter. Access se lancera, décompilera le code P compilé (code "compressé") et recompilera automatiquement la source VBA en code P.

4
StockB

Les autres réponses ici semblent toutes un peu complexes à mon goût.

Pour décompiler une base de données Access:

Ouvrez la boîte de dialogue Exécuter dans le menu Démarrer ou appuyez sur Win + R

Tapez: MSACCESS.EXE /decompile (une installation correcte devrait ouvrir l'application Access, vous pouvez également fournir le chemin d'accès complet à MSACCESS.EXE), puis appuyez sur OK.

L'accès s'ouvre maintenant. Ouvrez votre base de données dans la fenêtre d'accès qui vient de s'ouvrir. Cela le décompilera.

3
Erik A

Je voulais juste ajouter mes deux cents. Je travaille quotidiennement avec les bases de données SQL Server, SSIS et MS Access, et notre réseau nous permet d'utiliser différents bureaux Citrix; certains sont Win Serv 2003 SP2 et certains sont basés sur Win Serv 2008 R2. Lorsque vous compactez et réparez MS Access dbs sur un seul bureau, les bases de données sont correctes. Mais, lorsque vous décompilez, vous devez vous assurer que quiconque utilise le dbs sera en mesure de les ouvrir. Vérifiez tous les contrôles pour voir s'ils fonctionnent de la même manière d'un poste de travail à l'autre. Vous rencontrerez des problèmes lorsque l'installation de MS Access par quelqu'un d'autre ne contient pas les mêmes bibliothèques. Cela nous amène à interdire tout développement de front-end avec des contrôles non conventionnels, spécialement ceux que vous auriez à ajouter une référence à la base de données afin d'utiliser. Cependant, c'est une excellente ressource pour réduire la taille et accélérer votre code, la décompilation peut causer des tonnes de problèmes dans un environnement multi-utilisateurs

2
Carlos Flores

Ou tout simplement, vous pouvez créer un raccourci sur votre bureau (avec l'indicateur/Decompile) et faire glisser votre application Access en maintenant SHIFT pour contourner tout code

1
John