web-dev-qa-db-ja.com

データベースアプリケーションをどのように逆コンパイルおよび再コンパイルしますか?

Accessデータベースアプリケーションがあり、それを逆コンパイルおよび再コンパイルする適切な方法を知りたいです。

受け入れられた答え は素晴らしいですが、すべてのデータベースにショートカットを作成するのは少し非実用的です。

これを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
}

次に、次のように呼び出します。

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

これにより、Power Shellコマンドラインからanydbをすばやく簡単に逆コンパイルできます。

アプリケーションの起動をバイパスするには、これを実行するときにShiftキーを押し続ける必要があることに注意してください。

9
RubberDuck

Accessデータベースを逆コンパイルするには、次の要素を含むショートカットを作成する必要があります。

  1. MS Access実行可能ファイル(MSACESS.exe)へのパス
  2. 逆コンパイルするデータベースへのパス
  3. / decompileフラグ

そのため、ショートカットは次のようになります。

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

明らかに、パスはシステムによって異なります。

このコマンドを実行する前に、データベースのバックアップを作成することをお勧めします。

データベースにスタートアップコードがある場合は、Shiftキーを押したままにして、スタートアップコードの実行をバイパスする必要があります。

データベースが開いたら、データベースを圧縮および修復して、最適なパフォーマンスを確保できます。

圧縮と修復の後、モジュールを開いてDebug Compile [DatabaseName]コマンドを使用して、VBAコードを再コンパイルできます。

これが頻繁に実行したい場合は、SendToメニューに「アクセス逆コンパイル」ショートカットを作成できます。 SendToメニューにこのショートカットを作成したら、任意のAccessデータベースを右クリックして、「送信-> Access Decompile」を選択できます。これは、特定のデータベースへのショートカットを作成するよりもはるかに簡単です。

次の手順に従って、アクセス逆コンパイルショートカットを使用して[送信]メニューをカスタマイズします。

  1. Access実行可能ファイルへのショートカットを作成します。
  2. ショートカットのターゲットに/ decompileフラグを追加します。ショートカットは次のようになります。

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

  3. Windowsエクスプローラーを開き、次をアドレスバーに貼り付けます。

    %APPDATA%\Microsoft\Windows\SendTo

  4. 作成したショートカットをSendToフォルダーにコピーします。

  5. アクセス逆コンパイルのショートカットが使用できるようになります。

Access Decompileショートカットを呼び出すには、WindowsエクスプローラーでAccessデータベースを右クリックし、[送信]-> [Access Decompile]を選択します。データベース内のスタートアップコードをバイパスするには、Shiftキーを押したままにしてください。

45
Tim Lentine

@Tim Lentineの実用的な指示は優れていますが、逆コンパイルを行う価値があるために必要な実際の手順は省略しています。

  1. データベースをバックアップします。

  2. データベースを圧縮します。

  3. timの指示で作成されたショートカットを使用して、データベースを開きます。

  4. accessのインスタンスを閉じます。

  5. accessの新しいインスタンスを開き、デコンパイルしたばかりのデータベースを開きますが、すべてのスタートアップコードをバイパスするようにしてください(つまり、Shiftキーを押したままにします)。それを行わない場合は、ステップ3に戻って再試行することもできます。起動コードが実行されると、準備が整う前にコードが再コンパイルされるためです。

  6. 逆コンパイルされたデータベースを圧縮します(また、スタートアップコードをバイパスするようにShiftキーを押したままにしてください。#5を参照してください)。

  7. vBEを開き、[デバッグ]メニューの[コンパイル[プロジェクト名]]を選択します。

  8. [ファイル]メニューで、プロジェクトを保存します。

  9. 再びコンパクト。

なぜこれらすべての手順が必要なのですか?

VBAを逆コンパイルするだけではないため、コンパイルしたpコードが保存されていたすべてのデータページを完全に破棄してから再コンパイルする必要があります。

私もお勧めします:

  1. vBEオプションで、コンパイル時にオンをオフにします

  2. vBEで、ツールバーに[コンパイル]ボタンを追加します。

  3. 多くの場合、2〜3行のコードごとに、ツールバーのボタンでコンパイルします。

逆コンパイルは、常に使用する必要があるものではありませんが、ヘビーデューティコーディング中に、1日に2、3回逆コンパイルすることがあります。そして、私は通常、アプリを本番環境にリリースする前の最後のステップとして逆コンパイル/再コンパイルします。

最後に、 Michael Kaplanのこの件に関する記事 を読んで理解を深めてください。

37
David-W-Fenton

逆コンパイルのプロセスを自動化するVBSスクリプトを作成しました。 MicrosoftがこれをAccessに統合していないのは愚かなことです。VBAを大量に使用するアプリケーションを開発する場合に必要であると考えています。

このスクリプトは、MSACCESS.exeを見つけ、その名前がコードで指定されているスクリプトの親ディレクトリにあるデータベース上で、逆コンパイルフラグを使用してAccessを実行します。

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

このテキストをドキュメントに貼り付けるには、.vbs拡張機能をダブルクリックして実行します。 Accessが起動し、コンパイルされたPコード(「パック」コード)を逆コンパイルし、VBAソースを自動的に再コンパイルしてPコードに戻します。

4
StockB

ここでの他の答えはすべて、私の好みには少し複雑に思えます。

Accessデータベースを逆コンパイルするには:

スタートメニューから実行ダイアログを開くか、 Win + R

入力:MSACCESS.EXE /decompile(適切にインストールするとAccessアプリケーションが開きます。MSACCESS.EXEへのフルパスを指定することもできます)、[OK]を押します。

アクセスが開きます。開いたばかりのAccessウィンドウでDBを開きます。それはそれを逆コンパイルします。

3
Erik A

ちょうど私の2セントを追加したかった。私はSQL Server、SSIS、およびMS Accessデータベースを毎日使用しており、ネットワークによってさまざまなCitrixデスクトップを使用できます。一部はWin Serv 2003 SP2で、一部はWin Serv 2008 R2ベースです。 1つのデスクトップでMS Access dbを圧縮して修復すると、データベースは正常です。ただし、逆コンパイルするときは、dbsを使用する他のユーザーがそれらを開くことができることを確認する必要があります。すべてのコントロールをチェックして、ワークステーション間で同じように機能するかどうかを確認します。他の人のMS Accessのインストールに同じライブラリが含まれていない場合、問題が発生します。そのため、従来とは異なるコントロールを使用したフロントエンドの開発、特に使用するためにdbへの参照を追加する必要があるものをすべて禁止することになります。ただし、コードのサイズを小さくして高速化するのに最適なリソースですが、逆コンパイルはマルチユーザー環境で多くの問題を引き起こす可能性があります

2
Carlos Flores

または、単に(/ Decompileフラグを使用して)デスクトップにショートカットを作成し、Shiftキーを押しながらAccessアプリケーションをドラッグアンドドロップして、コードをバイパスします。

1
John