Descobrir o nome do campo chave da tabela em run time

Delphi

12/03/2012

Olá pessoal!

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

Douglas Maicon

Curtidas 0

Respostas

Leonardo Xavier

Leonardo Xavier

12/03/2012

como é o arquivo gerado, que é lido pelo seu sistema?
GOSTEI 0
Douglas Maicon

Douglas Maicon

12/03/2012

como é o arquivo gerado, que é lido pelo seu sistema?


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
Leonardo Xavier

Leonardo Xavier

12/03/2012

coloque um for ente o cif e o tabela delete...

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
Douglas Maicon

Douglas Maicon

12/03/2012

coloque um for ente o cif e o tabela delete...

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
POSTAR