Fórum Salvar Data e Campo alterado no DB #531727
15/09/2015
0
Como poderia criar uma rotina que fizesse isso automaticamente, sem precisar que eu tenha que inserir os dados manualmente?
Grato
Allan
Allan
Curtir tópico
+ 0Post mais votado
16/09/2015
O que você precisa pode ser realizado com uma Trigger no banco de dados.
Luiz Freitas
Gostei + 1
Mais Posts
16/09/2015
Allan
poderias dá um exemplo?
to quebrando a cabeça desde ontem....
Gostei + 0
16/09/2015
Luiz Freitas
Gostei + 0
16/09/2015
Allan
Gostei + 0
16/09/2015
Jothaz
Qual versão?
Gostei + 0
16/09/2015
Allan
Gostei + 0
16/09/2015
Jothaz
Nas versões iguais ou superiores a 2010 você pode simular triggers utilizando Data Macros.
Dê uma pesquisada no Pai Google que você achará exemplos.
Gostei + 0
16/09/2015
Allan
Gostei + 0
16/09/2015
Jothaz
Nesta versão que você esta utilizando não tem como implementar trigger ou Data Macros, então teria de mudar para a versão 2010
ou mudar para um banco de dados tpagos: SQL Server ou Oracle ou gratis: PostgreSQL, Maria DB ou MySql.
Agora somente você terá poderá decidir se você terá capacidade de utilizar outro bacno de dados ou mesmo qual o impacto da mudança.
Gostei + 1
16/09/2015
Allan
Gostei + 0
16/09/2015
Fabio Cardoso
Você quer essa rotina direto no banco ou seria um procedimento via delphi mesmo?
Porque via Delphi não precisa de mudança nenhuma de banco de dados. podemos desenvolver uma ideia aqui
você quer via delphi ou banco?
Gostei + 1
16/09/2015
Allan
então, queria de preferencia via banco, mas também pode ser via Delphi.
Gostei + 0
16/09/2015
Luiz Freitas
Realmente, a maneira mais simples de fazer o que você precisa é utilizando trigger, mas como o db que você está utilizando não as suporta, nada impede que o trabalho seja realizado diretamente pelo delphi.
Então, criando uma procedure (ou function, depende se você vai querer algum retorno, ou não) com o código necessário para gravar nesta tabela de log, é só chamar essa procedure nas inclusões e a cada alteração.
Compartilha a estrutura da tabela na qual você vai armazenar os logs que, como o Fábio disse, te auxiliamos na criação dessa procedure, se você precisar de ajudar.
Gostei + 0
17/09/2015
Allan
recebendo o campo que foi alterado de qual cliente e quando.
Gostei + 0
17/09/2015
Luiz Freitas
recebendo o campo que foi alterado de qual cliente e quando.
Olá Allan, boa tarde!
Blz! Vamos lá:
Se você estiver utilizando um DataModule (provavelmente sim) declare um procedimento como este (declara em Public, assim fica visível em todos os formulários que estiverem fazendo uso do seu DataModule):
public
procedure GravaLog(pCampo, pCliente: string; pData, pHora: tDateTime);
{ Public declarations }
E implementa assim, caso você esteja utilizado os componentes ADO (a lógica é a mesma, caso você esteja utilizando outros componentes de acesso a dados):
procedure TDataModule.GravaLog(pCampo, pCliente: string; pData, pHora: tDateTime);
begin
qryTB_CACHE.SQL.Clear;
qryTB_CACHE.SQL.Add('insert into TB_CACHE(ALTERACAO, CLIENTE, DATA, HORA)');
qryTB_CACHE.SQL.Add('values(' +quotedStr(pCampo) + ', '
+quotedStr(pCliente) + ', '
+'#' +formatDateTime('yyyy/MM/dd', pData) +'#' +', '
+quotedStr(formatDateTime('hh:mm:ss', pHora)) + ')');
qryTB_CACHE.SQL.SaveToFile('d:\teste-sql.txt');
qryTB_CACHE.ExecSQL;
//obs:
//deduzi que o campo COD seja auto incremento
end;
Utilize toda vez que realizar uma alteração:
GravaLog('CIDADE', 'LUIZ', Date, Time);
Não sei exatamente como você está trabalhando, talvez já tenha essas informações em outro lugar, mas acredito que faltam campos para você identificar, principalmente, de qual tabela é o campo sendo alterado e a qual registro alterado na tabela aquele log pertence.
É uma ideia básica pra você tentar solucionar o problema ai... espero que te dê uma base pra conseguir o que precisa.
Qualquer coisa, sinta-se a vontade para perguntar.
t++
Gostei + 1
18/09/2015
Allan
Eu declaro a procedure publica GravaLog no DM, e a TDataModule.GravaLog eu chamo No envento do botão, ou num evento da table?
Desculpe por minha ignorância.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)