registrar acoes dos usuarios no uso do sistema

Delphi

21/01/2007

olha só pessoal


Gostaria de criar não sei e é plo trigger ou similar uma forma que registrasse toda açao dos usuarios nas tabelas como ´INCLUSAO,ALTERAÇAO,EXCLUSAO´ de preferencia em qual compo da tabela ele fez a açao.

estou com este problema aqui...


teria como?[/list]


Erivando

Erivando

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

21/01/2007

Colega,

Se estiver um SGBD, você pode fazer usando triggers, mas ficará dependente do banco de dados e sua portabilidade ficará comprometida. Uma alternativa é utilizar o manipulador de eventos BeforeAlgumaCoisa dos datasets ou descendentes. Terá uma performance inferior a primeira opção, porém, maior portabilidade.


GOSTEI 0
Erivando

Erivando

21/01/2007

[quote:cc331d5c52=´Aroldo Zanela´]Colega,

Se estiver um SGBD, você pode fazer usando triggers, mas ficará dependente do banco de dados e sua portabilidade ficará comprometida. Uma alternativa é utilizar o manipulador de eventos BeforeAlgumaCoisa dos datasets ou descendentes. Terá uma performance inferior a primeira opção, porém, maior portabilidade.[/quote:cc331d5c52]



Então amigo Zanela, poderei até criar uma tabela onde poderei estar marzenando todas as acoes executadas pelos usuarios com data horarios etc.. isso? para que a quaquer momento o administrador do sistema possa fazer filtros e pequisas sobre as açoes dos usuarios! Que vc acha?



GOSTEI 0
Macario

Macario

21/01/2007

Olá.

Uma maneira de implementar um Log de ações é utilizar o evento BeforeUpdateRecord do DataSetProvider.

Na edição 51 da revista ClubeDelphi você encotrará um artigo sobre tema.

Qualquer coisa é so postar novamente.

[]´s 8)


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

21/01/2007

Colega,

Eu implementei isso num sistema há alguns anos usando um campo BLOB e armazenando em formato XML para qualquer tabela as ações antes de serem aplicadas.

Exemplo:

<log>
<tabela>clientes</tabela>
<acao>remoção</acao>
<campoA>DadosA</campoA>
<campoB>DadosB</campoB>
</log>


Neste exemplo, é possível saber qual ERA a informação armazenada em um determinado instante.


GOSTEI 0
Macario

Macario

21/01/2007

Ola.

No BeforeUpdateRecord, é disponibilizado o Delta do DataSet onde temos acesso as variaveis NewValue e OldValue, com isso podemos manter o historico do registro.

Outro detalhe é que é possivel implementar uma rotina que grava apenas os campos efetivamente alterados.


[]´s


GOSTEI 0
Erivando

Erivando

21/01/2007

Olá. Uma maneira de implementar um Log de ações é utilizar o evento BeforeUpdateRecord do DataSetProvider. Na edição 51 da revista ClubeDelphi você encotrará um artigo sobre tema. Qualquer coisa é so postar novamente. []´s 8)


Obrigado Macario, eu tenho a revista fui verificar e achei bacana, irei adaptar a minha aplicação!


GOSTEI 0
Macario

Macario

21/01/2007

Obrigado Macario, eu tenho a revista fui verificar e achei bacana, irei adaptar a minha aplicação!


Qualquer duvida post aqui novamente, eu fiz uso das dicas do artigo.


[]´s


GOSTEI 0
Francisco.riva1

Francisco.riva1

21/01/2007

Ola amigos,

DataSetProvider funciona legal ... agora como vcs resolveram quando existem relacionamentos mestre x detalhe (onde temos somente o log da tabela mestre) !?

Abraco.


GOSTEI 0
Macario

Macario

21/01/2007

Olá.

É so usar o evento de cada DSP.

8)


GOSTEI 0
Francisco.riva1

Francisco.riva1

21/01/2007

Ola´ Macario,

O q estou dizendo e´ q quando ha´ um relacionamento mestre x detalhe, so´ existe um DSP para as duas tabelas.

Para a tabela mestre, tudo bem, funciona normalmente ... mas para a tabela detalhe (que nao tem um DSP) nao ha´ essa funcionalidade.

Em seus projetos vc nao tem esse tipo de relacionamento, se tiver faca o teste para ver, vc nunca tera´ a informacao das alteracoes da tabela Detalhe por nao ter um DSP pra ela.

Ainda nao sei como criar esse mesmo recurso nesse caso, vc tem ideia de como fazer (ou seja, fazer o mesmo controle que faz no DSP so´ q no CDS) ?

Obrigado.
Abracos.


GOSTEI 0
POSTAR