Como se descompila e recompila uma aplicação de banco de dados?

Tenho uma aplicação de acesso à base de dados e gostaria de saber a forma correcta de a decompor e recompilar.

Author: StockB, 2010-07-16

6 answers

A resposta Aceite é óptima, mas é um pouco impraticável criar um atalho para cada banco de dados.

Pode gravar isto como um módulo 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
}
Então chama-lhe assim:
Decompile-AccessDB -Path "C:\Path\to\some.accdb"
Isto permite-lhe descompilar rápida e facilmente qualquer db da linha de comando power shell.

Lembre-se que ainda precisa de manter a tecla Shift carregada quando executar isto para contornar o arranque da aplicação.

 7
Author: RubberDuck, 2017-05-23 12:09:39

Para descompilar uma base de dados de acesso terá de criar um atalho com os seguintes elementos:

  1. localização do executável MS Access (MSACESS.exe)
  2. localização da base de dados que gostaria de descompilar
  3. a bandeira /descompilar

Todos juntos, então, o atalho seria parecido com o seguinte:

"C:\Program Files\Microsoft Office\Office\MSACCESS.EXE" "C:\users\tim\documents\Mydatabase.mdb" /decompile
Obviamente, os caminhos serão diferentes no teu sistema. Eu recomendaria fazer uma cópia de segurança da sua base de dados antes de executar comando.

Se tiver algum código de arranque na sua base de Dados, deverá manter carregada a chave shift para contornar a execução do código de arranque.

Assim que a base de dados Abrir, você pode compactar e reparar a base de dados para garantir o melhor desempenho.

Após o compacto e a reparação, poderá recompilar o código VBA abrindo qualquer módulo e usando o comando Debug Compile [DatabaseName].

Se isto é algo que você quer fazer frequentemente, você pode criar um atalho "Access Descompile" no seu SendTo Menu. Logo que tenha este atalho no Menu SendTo, poderá carregar com o botão direito em qualquer base de dados de acesso e seleccionar "enviar para --> Access Descompile", o que é muito mais fácil do que ter de criar um atalho para a base de dados específica.

Siga estes passos para personalizar o menu Enviar para com um atalho de descompilação de acesso

  1. crie um atalho para o executável de acesso.
  2. Adicione a bandeira / descompile no alvo para o atalho. O atalho ficará assim.:

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

  3. Abra o Windows Explorer e cole o seguinte na barra de endereços:

    %APPDATA%\Microsoft\Windows\SendTo

  4. Copia o atalho que criou para a pasta SendTo.

  5. O atalho Access Descompile estará agora disponível para uso.

Para invocar o atalho de descompilação do acesso, carregue com o botão direito numa base de dados de acesso no Windows Explorer e seleccione "Enviar para --> aceder Descompile". Certifique-se de manter a tecla shift carregada para ignorar qualquer arranque código na base de dados.

 43
Author: Tim Lentine, 2016-06-16 16:39:42
As instruções práticas de@Tim Lentine são boas, mas ele deixa de fora os passos necessários para uma descompilação valer a pena:
  1. Faz uma cópia da tua base de dados.

  2. Compacta a tua base de dados.

  3. Usando o atalho criado com as instruções do Tim, abra a sua base de dados.

  4. Fecha essa instância de acesso.

  5. Abra uma nova instância de acesso e abra a base de dados que acabou de descompilar, mas certifique - se que contorna todo o arranque Código (i.e., mantenha a tecla shift carregada). Se você não fizer isso, então você pode muito bem voltar para o Passo 3 e tentar novamente, uma vez que se o código de inicialização correr, o seu código irá recompilar antes que você esteja pronto para fazê-lo.

  6. Compactar a base de dados descompilada (e certifique-se que mantém a tecla shift carregada de modo a que ela contorne o código de arranque; veja o #5).

  7. Abra o VBE e no menu Depurar, escolha COMPILE [nome do projecto].

  8. No menu ficheiro, grava a projecto.

  9. Compacto outra vez.

Porque é que todos estes passos são necessários?

Porque você não quer apenas descompilar o VBA, você quer ter certeza de que todas as páginas de dados onde o código p compilado foi armazenado são completamente descartadas antes de você recompilar.

Também recomendo:

  1. Nas opções VBE, desligue o COMPILE ON DEMAND

  2. No VBE, adicione o botão compilar à sua barra de ferramentas.

  3. Compilar frequentemente com esse botão na barra de ferramentas, depois de cada duas ou três linhas de código.

Descompilar não é algo que se deve usar o tempo todo, mas durante a codificação, posso fazer uma descompilação algumas vezes por dia. E eu geralmente descompilar / recompilar como o último passo antes de lançar um aplicativo em uso de produção. Por último, leia o artigo de Michael Kaplan sobre o assunto para entendê-lo melhor.
 33
Author: David-W-Fenton, 2010-07-16 19:25:35

Eu escrevi um script VBS para automatizar o processo de descompilação. É bobagem que a Microsoft não integrou isso no Access, considerando que é uma necessidade ao desenvolver aplicações VBA-heavy.

O script localiza o MSACCESS.exe e executa o acesso com a bandeira de descompile em um banco de dados localizado no diretório pai do script, cujo nome é dado no código.

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

Basta colar este texto num documento com uma extensão .vbs e fazer duplo-click para o executar. Acesso irá lançar, descompilar o código p compilado ("packed" code), e recompilar automaticamente a fonte VBA de volta para o código P.

 4
Author: StockB, 2014-10-31 16:07:23
As outras respostas parecem-me um pouco complexas.

Para descompilar uma base de dados de acesso:

Abra a janela corra do menu inicial, ou carregue em ganhe + R

Digite em: MSACCESS.EXE /decompile (uma instalação adequada deve abrir a aplicação de Acesso, Você também pode fornecer o caminho completo para MSACCESS.EXE), and press OK.

O acesso abre agora. Abra o seu cadáver na janela de acesso que acabou de abrir. Isso vai descompilá-lo.
 3
Author: Erik von Asmuth, 2018-03-10 21:54:08
Só queria acrescentar a minha opinião. Eu trabalho com o servidor SQL, SSIS e MS Access databases diariamente, e nossa rede nos permite usar diferentes desktops Citrix; alguns são Win Serv 2003 SP2 e alguns são Win Serv 2008 R2 baseado. Quando você compactar e reparar MS Access dbs em um desktop as bases de dados são boas. Mas, quando descompilar, tem de se certificar que quem mais usar o dbs será capaz de abri-los. Verifique todos os controles para ver se eles trabalham o mesmo de posto de trabalho para Posto de trabalho. Você vai se deparar com problemas quando a instalação de outra pessoa do MS Access não contém as mesmas bibliotecas. Isso nos leva a proibir todo o desenvolvimento de front-ends com controles não convencionais, especialmente aqueles que você teria que adicionar uma referência ao db para usar. No entanto, é um grande recurso para reduzir o tamanho e acelerar o seu código, descompilação pode causar toneladas de problemas em um ambiente multi-usuário
 2
Author: Carlos Flores, 2014-02-05 18:54:48