webentwicklung-frage-antwort-db.com.de

Wie dekompiliert und kompiliert man eine Datenbankanwendung neu?

Ich habe eine Access-Datenbankanwendung und möchte wissen, wie sie richtig dekompiliert und neu kompiliert werden kann.

Die akzeptierte Antwort ist großartig, aber es ist ein wenig unpraktisch, für jede Datenbank eine Verknüpfung zu erstellen.

Sie können dies als Powershell-Modul speichern.

#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
}

Dann nenne es so:

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

Auf diese Weise können Sie any db schnell und einfach über die Power Shell-Befehlszeile dekompilieren.

Beachten Sie, dass Sie die Umschalttaste weiterhin gedrückt halten müssen, wenn Sie dies ausführen, um den Start der Anwendung zu umgehen.

9
RubberDuck

Um eine Access-Datenbank zu dekompilieren, müssen Sie eine Verknüpfung mit den folgenden Elementen erstellen:

  1. Pfad zur ausführbaren MS Access-Datei (MSACESS.exe)
  2. Pfad zur Datenbank, die Sie dekompilieren möchten
  3. Das Flag/decompile

Alles in allem würde die Verknüpfung dann ungefähr so ​​aussehen:

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

Offensichtlich sind die Pfade auf Ihrem System unterschiedlich.

Ich würde empfehlen, eine Sicherungskopie Ihrer Datenbank zu erstellen, bevor Sie diesen Befehl ausführen.

Wenn Sie einen Startcode in Ihrer Datenbank haben, sollten Sie die Umschalttaste gedrückt halten, um die Ausführung des Startcodes zu umgehen.

Sobald die Datenbank geöffnet ist, können Sie sie komprimieren und reparieren, um eine optimale Leistung sicherzustellen.

Nach dem Komprimieren und Reparieren können Sie den VBA-Code neu kompilieren, indem Sie ein beliebiges Modul öffnen und den Befehl Debug Compile [DatabaseName] Verwenden.

Wenn Sie dies häufig tun möchten, können Sie in Ihrem SendTo-Menü eine Verknüpfung "Access Decompile" erstellen. Sobald Sie diese Verknüpfung im SendTo-Menü haben, können Sie mit der rechten Maustaste auf eine Access-Datenbank klicken und "Senden an -> Access-Dekompilierung" auswählen. Dies ist viel einfacher, als eine Verknüpfung zu der jeweiligen Datenbank zu erstellen.

Führen Sie die folgenden Schritte aus, um das Menü Senden an mit einer Verknüpfung zu Access Decompile anzupassen

  1. Erstellen Sie eine Verknüpfung zur ausführbaren Access-Datei.
  2. Hängen Sie das Flag/decompile im Ziel für die Verknüpfung an. Die Verknüpfung sieht folgendermaßen aus:

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

  3. Öffnen Sie den Windows Explorer und fügen Sie Folgendes in die Adressleiste ein:

    %APPDATA%\Microsoft\Windows\SendTo

  4. Kopieren Sie die erstellte Verknüpfung in den SendTo-Ordner.

  5. Die Access Decompile-Verknüpfung kann jetzt verwendet werden.

Um die Access Decompile-Verknüpfung aufzurufen, klicken Sie mit der rechten Maustaste auf eine Access-Datenbank im Windows-Explorer und wählen Sie "Senden an -> Access Decompile". Halten Sie die Umschalttaste gedrückt, um den Startcode in der Datenbank zu umgehen.

45
Tim Lentine

Die praktischen Anweisungen von @Tim Lentine sind gut, aber er lässt die tatsächlichen Schritte aus, die erforderlich sind, damit sich eine Dekompilierung lohnt:

  1. sichern Sie Ihre Datenbank.

  2. komprimieren Sie Ihre Datenbank.

  3. öffnen Sie mit der Verknüpfung, die mit Tims Anweisungen erstellt wurde, Ihre Datenbank.

  4. schließen Sie diese Instanz von Access.

  5. öffnen Sie eine neue Instanz von Access und öffnen Sie die gerade dekompilierte Datenbank. Stellen Sie jedoch sicher, dass Sie den gesamten Startcode umgehen (d. h. halten Sie die Umschalttaste gedrückt). Wenn Sie dies nicht tun, können Sie auch zu Schritt 3 zurückkehren und es erneut versuchen. Wenn der Startcode ausgeführt wird, wird der Code erneut kompiliert, bevor Sie dazu bereit sind.

  6. komprimieren Sie die dekompilierte Datenbank (und stellen Sie sicher, dass Sie die Umschalttaste gedrückt halten, damit der Startcode umgangen wird; siehe # 5).

  7. öffnen Sie die VBE und wählen Sie im Menü Debug den Befehl COMPILE [Name des Projekts].

  8. speichern Sie im Menü Datei das Projekt.

  9. wieder kompakt.

Warum sind all diese Schritte notwendig?

Da Sie nicht nur die VBA dekompilieren möchten, möchten Sie sicherstellen, dass alle Datenseiten, auf denen der kompilierte P-Code gespeichert wurde, vollständig verworfen werden, bevor Sie erneut kompilieren.

Ich empfehle auch:

  1. deaktivieren Sie in den VBE-Optionen COMPILE ON DEMAND

  2. fügen Sie in der VBE die Schaltfläche KOMPILIEREN zu Ihrer Symbolleiste hinzu.

  3. kompilieren Sie häufig mit dieser Schaltfläche in der Symbolleiste nach jeweils zwei oder drei Codezeilen.

Dekompilieren sollten Sie nicht die ganze Zeit verwenden, aber während der Hochleistungscodierung kann es sein, dass ich ein paar Mal am Tag eine Dekompilierung durchführe. Und ich dekompiliere/rekompiliere im Allgemeinen als letzten Schritt, bevor eine App für den Produktionsbetrieb freigegeben wird.

Lesen Sie zum Schluss Michael Kaplans Artikel zu diesem Thema , um es besser zu verstehen.

37
David-W-Fenton

Ich habe ein VBS-Skript geschrieben, um den Dekompilierungsprozess zu automatisieren. Es ist albern, dass Microsoft dies nicht in Access integriert hat, da dies bei der Entwicklung von VBA-lastigen Anwendungen unbedingt erforderlich ist.

Das Skript sucht MSACCESS.exe und führt Access mit dem Dekompilierungsflag in einer Datenbank aus, die sich im übergeordneten Verzeichnis des Skripts befindet, dessen Name im Code angegeben ist.

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

Fügen Sie diesen Text einfach in ein Dokument mit der Erweiterung .vbs Ein und doppelklicken Sie darauf, um es auszuführen. Access wird gestartet, dekompiliert den kompilierten P-Code ("gepackter" Code) und kompiliert die VBA-Quelle automatisch wieder in P-Code.

4
StockB

Die anderen Antworten hier scheinen alle etwas komplex zu sein.

So dekompilieren Sie eine Access-Datenbank:

Öffnen Sie den Dialog Ausführen über das Startmenü oder drücken Sie Win + R

Eintippen: MSACCESS.EXE /decompile (Eine ordnungsgemäße Installation sollte die Access-Anwendung öffnen. Sie können auch den vollständigen Pfad zu MSACCESS.EXE angeben.) Klicken Sie anschließend auf OK.

Der Zugriff wird jetzt geöffnet. Öffnen Sie Ihre Datenbank im gerade geöffneten Access-Fenster. Das wird es dekompilieren.

3
Erik A

Ich wollte nur meine zwei Cent hinzufügen. Ich arbeite täglich mit SQL Server-, SSIS- und MS Access-Datenbanken. In unserem Netzwerk können wir verschiedene Citrix-Desktops verwenden. Einige sind Win Serv 2003 SP2 und andere basieren auf Win Serv 2008 R2. Wenn Sie MS Access-Datenbanken auf einem Desktop komprimieren und reparieren, sind die Datenbanken in Ordnung. Aber wenn Sie dekompilieren, müssen Sie sicherstellen, dass jeder, der die dbs verwendet, sie öffnen kann. Überprüfen Sie alle Steuerelemente, um festzustellen, ob sie von Arbeitsstation zu Arbeitsstation gleich funktionieren. Sie werden auf Probleme stoßen, wenn die Installation von MS Access eines anderen Benutzers nicht dieselben Bibliotheken enthält. Das führte dazu, dass wir jegliche Entwicklung von Frontends mit unkonventionellen Steuerelementen untersagten, insbesondere solchen, für deren Verwendung Sie einen Verweis auf die Datenbank hinzufügen müssten. Es ist eine großartige Ressource, um die Größe Ihres Codes zu verringern und ihn zu beschleunigen. In einer Mehrbenutzerumgebung kann das Dekompilieren eine Menge Probleme verursachen

2
Carlos Flores

Oder Sie können einfach eine Verknüpfung auf Ihrem Desktop erstellen (mit dem Flag/Decompile) und Ihre Access-Anwendung mit gedrückter UMSCHALTTASTE ziehen, um den Code zu umgehen

1
John