Fórum Descobrir o nome do campo chave da tabela em run time #413966
12/03/2012
0
Estou com um problema em um projeto aqui na empresa.
Estou implementando um registro de LOG nesse projeto, e o problema é que alguns dos procedimentos que preciso registrar o LOG, foram feitos de formas abstratas para que possam ser usados em varios momento e em diferentes tabelas
portanto preciso de uma maneira de descobrir qual o campo que é chave primaria na tabela passada como parameto
obs:
Estou usando delphi7 e banco de dados access
estou usando adotable para conectar
desde ja agradeço
t++
Douglas Maicon
Curtir tópico
+ 0Posts
15/03/2012
Leonardo Xavier
Gostei + 0
15/03/2012
Douglas Maicon
Estou armazenado diretamente no Banco de Dados (Criei uma tabela chamada AuditoriaAtividades para este fim, --- pq ja tinha uma tabela chamada LOG que armazena os acessos dos usuarios de todas as filiais)
procedure excluir(var tabela : tadotable);
begin
if dados_principal.exc then
if messagedlg(TEM CERTEZA QUE DESEJA EXCLUIR O REGISTRO ATUAL?, mtConfirmation ,[mbyes,mbno],0) = mryes then
begin
if tabela.RecordCount > 0 then
begin
tabela.Delete;
showmessage(Registro excluído com êxito);
end;
end;
end;Como podem ver na linha de codigo acima, este procedimento pede uma tabela como parametro e usa tabela.delete para excluir o registro atual da tabela, o problema é que preciso implementar para registrar a ação do func logado (esta rotina ja esta pronta) mas preciso saber em qual tabela e qual registro esta sendo excluido para armazenar na tabela AuditoriaAtividades
da forma que esta a procedure pode estar sendo chamado por exemplo para excluir um cliente ou como tambem para excluir uma parcela ou registro do caixa
se tiver alguma maneira de descobrir qual é o campo chave da tabela(parametro) ou se alguem tiver uma outra solução estou à disposição para trocar ideias
valeu galera ate maissss
Gostei + 0
15/03/2012
Leonardo Xavier
for x=1 to datamodule.tabela.count do begin
if x=tabela.recordnum then begin
..grava seus dados na tabela desejada
end;
end;
Gostei + 0
16/03/2012
Douglas Maicon
for x=1 to datamodule.tabela.count do begin
if x=tabela.recordnum then begin
..grava seus dados na tabela desejada
end;
end;
Nao deu certo Leonardo, mas valeu a intensão
optei por outra solução:
Alterar a procedure solicitando não so o nome da tabela como tambem o valor do campo chave que está sendo excluido
a assinatura do procedimento ficou da seguinte forma:
procedure excluir(var tabela : tadotable; campo_PK : integer);
abraços até a proxima
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)