Como registrar alterações de dados no Access no nível da tabela?

8

Suporte um banco de dados do Access para uma organização sem fins lucrativos. Temos alguns problemas com a alteração misteriosa dos dados e houve um debate amigável sobre se isso é causado por usuários que não são os mais instruídos em computação ou por parte do meu processamento em segundo plano.

Adicionei algumas verificações no nível da interface do usuário para essas condições, mas gostaria de fazer algumas verificações no nível da tabela do banco de dados para registrar quando determinados campos são alterados. Dessa forma, saberei sobre a alteração se ela foi iniciada por um usuário ou apenas a partir de uma consulta de atualização em execução em segundo plano. Normalmente, eu usaria um on updategatilho, mas, para meu conhecimento, o Access não suporta gatilhos. Existe alguma outra funcionalidade de registro ou de gatilho disponível no Access?

BenV
fonte

Respostas:

4

Infelizmente, o Microsoft Access não possui gatilhos ou algo parecido com gatilhos. Em cima da minha cabeça, você tem algumas opções desagradáveis:

  • Crie DateModifiede UserModifiedcolunas e atualize seu código para incluir esses valores. A desvantagem é que você conhecerá apenas a última pessoa que atualizou um registro e não terá um histórico para analisar.
  • Mantenha o front-end do Access e transforme suas tabelas em um back-end do SQL Server Express. Dessa forma, você poderá usar gatilhos (bem como trabalhos de backup e outras coisas legais).
LittleBobbyTables - Au Revoir
fonte
4

Além do método LittleBobbyTables, há uma terceira opção, que envolve a criação de uma _audittabela para cada tabela regular e a criação de uma lógica de lotes para apoiá-los, para que, quando as coisas mudem, você insira um registro nessas tabelas. (você já sabe quando está salvando / atualizando / excluindo os registros, sim?)

É verdade que é assim que os "bancos de dados maiores" fazem isso. A desvantagem aqui é a grande quantidade de lógica que você precisa fazer manualmente para simular o trabalho do tipo acionador em um servidor.

jcolebrand
fonte
4

Observe que, por exemplo, o SQL Server Express é gratuito e pode ser um substituto para o Access. Isso daria a funcionalidade de auditoria necessária. Não acho que a abordagem da "tabela de auditoria" seja viável; pressupõe que qualquer pessoa que se conecte ao banco de dados o faça através do cliente "oficial" que possui essa lógica. Com os gatilhos, não há como acessar os dados sem que eles disparem de qualquer cliente aleatório.

Uma terceira opção é o Wireshark ou similar para realmente observar o tráfego entre o cliente e o banco de dados (presumo que este não seja realmente o TDS, mas o protocolo de compartilhamento de arquivos?), Então você pode ver exatamente quem faz o que, quando e de qual máquina. A desvantagem disso é que requer muito armazenamento, alguns scripts para fazer a análise e pode afetar o desempenho.

Gaius
fonte