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

j'ai une application de base de données D'accès et j'aimerais savoir comment la décompiler et la recompiler.

31
demandé sur StockB 2010-07-16 19:40:48

6 réponses

accepté de répondre à c'est formidable, mais c'est un peu impossible de créer un raccourci pour chaque base de données.

vous pouvez enregistrer ceci comme un 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
}

Puis l'appeler comme ceci:

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

Cela vous permet de rapidement et facilement décompiler db de la ligne de commande de l'interpréteur de commandes.

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

7
répondu RubberDuck 2017-05-23 12:09:39

pour décompiler une base de données D'accès, vous aurez besoin de créer un raccourci avec les éléments suivants:

  1. chemin vers L'exécutable MS Access (MSACESS.exe)
  2. chemin vers la base de données que vous souhaitez décompiler
  3. /décompiler drapeau

tous ensemble, alors, le raccourci ressemblerait à quelque chose comme ceci:

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

évidemment, les chemins seront différents sur votre système.

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

si vous avez n'importe quel code de démarrage dans votre base de données, vous devriez tenir vers le bas la touche de déplacement pour contourner l'exécution de code de démarrage.

une fois la base de données ouverte, vous pouvez la compacter et la réparer pour assurer une performance optimale.

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

Si c'est quelque chose que vous voulez faire souvent, vous pouvez créer un raccourci" accès Decompile " dans le Menu SendTo. Une fois que vous avez ce raccourci dans le Menu SendTo, vous pourrez cliquer avec le bouton droit de la souris sur n'importe quelle base de données Access et sélectionner "Envoyer à --> accès Decompile", 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 Send To avec un raccourci Access Decompile

  1. Créer un raccourci vers l'exécutable Access.
  2. Ajout de l' /décompiler drapeau dans la Cible du raccourci. Le raccourci va ressembler à ceci:

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

  3. ouvrez Windows Explorer 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 accès Decompile sera désormais disponible.

pour invoquer le raccourci accès Decompile, droit cliquez sur une base de données D'accès dans L'Explorateur Windows et sélectionnez "Envoyer à --> accéder au Décompile". Assurez-vous de maintenir la touche majuscules vers le bas pour contourner n'importe quel code de démarrage dans la base de données.

43
répondu Tim Lentine 2016-06-16 16:39:42

les instructions pratiques de@Tim Lentine sont bonnes, mais il laisse de côté les étapes nécessaires pour qu'un décompile vaille la peine d'être fait:

  1. sauvegarde de votre base de données.

  2. compacter 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'accès.

  5. ouvrir une nouvelle instance d'Access et ouvrir la base de données vous venez de décompiler, mais assurez-vous de contourner tous les codes de démarrage (i.e., maintenez la touche Maj enfoncée). Si vous ne le faites pas, alors autant retourner à l'étape 3 et réessayer, car si le code de démarrage tourne, votre code se recompilera avant que vous ne soyez prêt à le faire.

  6. compacter la base de données décomposée (et s'assurer que vous maintenez la touche Maj enfoncée pour qu'elle contourne le code de démarrage; voir #5).

  7. ouvrir le VBE et sur le menu Debug, choisir compiler [nom du projet].

  8. dans le menu fichier, enregistrer le projet.

  9. compact de nouveau.

Pourquoi toutes ces étapes nécessaires?

parce que vous ne voulez pas simplement décompiler la VBA, vous voulez vous assurer que toutes les pages de données où le code p compilé a été stocké sont complètement jetées avant de recompiler.

je recommande également:

  1. dans les options VBE, désactivez la compilation SUR DEMANDE

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

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

Decompile n'est pas quelque chose que vous devriez utiliser tout le temps, mais pendant le codage lourd, je pourrais faire un décompile quelques fois par jour. Et je décompile généralement / recompile comme la dernière étape avant de libérer une application dans la production utiliser.

le Dernier de tous, lire article de Michael Kaplan sur le sujet pour mieux le comprendre.

33
répondu David-W-Fenton 2010-07-16 19:25:35

j'ai écrit un script VBS pour automatiser le processus de décompression. C'est stupide que Microsoft n'ait pas intégré cela dans Access, considérant que C'est une nécessité lors du développement D'applications VBA-heavy.

le script localise MSACCESS.exe et exécute L'accès avec l'indicateur de décompilé sur une base de données située dans le répertoire parent du script, dont le nom est indiqué 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

il suffit de coller ce texte dans un document avec un .vbs extension et double-cliquez dessus exécuter. L'accès lancera, décompilera le code-P compilé (code"packed"), et recompilera automatiquement la source VBA dans le code-P.

4
répondu StockB 2014-10-31 16:07:23

Les autres réponses ici paraître un peu complexe à mon goût.

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

Ouvrir Exécuter dialogue à partir du menu Démarrer, ou appuyez sur Win+ R

Type: MSACCESS.EXE /decompile (une installation correcte devrait ouvrir l'application Access, vous pouvez également fournir le chemin complet vers MSACCESS.EXE), et 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. Qui sera le décompiler.

3
répondu Erik von Asmuth 2018-03-10 21:54:08

je voulais juste ajouter mes deux cents. Je travaille quotidiennement avec des bases de données SQL Server, SSIS et MS Access, et notre réseau nous permet d'utiliser différents ordinateurs de bureau de Citrix; certains sont win Serv 2003 SP2 et d'autres sont Win Serv 2008 R2 basé. Lorsque vous compact et réparer MS Access dbs dans un bureau les bases de données sont très bien. Mais, quand vous décompilez, vous devez vous assurer que celui qui utilise le dbs sera capable de les ouvrir. Vérifiez toutes les commandes pour voir si elles fonctionnent de la même façon d'un poste de travail à l'autre. Vous se heurtera à 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 à rejeter tout développement de front-ends avec des contrôles non conventionnels, spécialement ceux que vous auriez à ajouter une référence à la db afin d'utiliser. Bien que, c'est une excellente ressource pour réduire la taille et accélérer votre code, la décomposition peut causer des tonnes de problèmes dans un environnement multi-utilisateurs

2
répondu Carlos Flores 2014-02-05 18:54:48