Delphi

ola, minha duvida é a seguinte , tenho uma aplicação no qual desejo saber sempre quando um registro for inserido numa tabela, exemplo:
to fazendo uma ação qualquer na aplicação, suponhamos que o funcionario x insera um novo registro na tabela atendimento, iria informar o funcionario y que possui alguem na fila de espera.
Só desejo saber como saber quando fui inserido um novo registro em uma determinada tabela;
Alguem tem alguma sujestao?

Tem vários jeitos de se fazer isso, mas vai depender do que você quer exatamente. Por exemplo:

  • apenas uma tabela precisa ser monitorada ou são várias?
  • qual a periodicidade é aceitável? Precisa ser em tempo real ou a cada X (5, 10, 30, …) segundos é suficiente?
  • precisa notificar todos os usuários ou só algum em específico? Ou usuários com um determinado perfil.

Um jeito simples seria ter um Timer na sua tela que faz uma consulta a cada X segundos, buscando os novos registros Se você armazenar a data e hora de inclusão no novo registro, pode pegar todos os registros inclusos desde a última consulta.

Abraço.

1 curtida

Então iria notificar um grupo de usuários , tipo não precisa ser tão de imediato, tenho um modelo de form pronto já pra notificação, ele abre no canto inferior direito e fecha automaticamente. Possui sim um campo que armazena a data e hora que foi inserido o registro no banco.
Poderia me dar alguma ideia de como fazeria usando o timer ?
Agradeço muito sua ajuda, abraços.

Em termos gerais (porque escrever todo o código seria muito trabalhoso), é algo como:

  • adicione um Timer no Form, com o intervalo que quiser (lembre-se que é em milissegundos, então multiplique os segundos por 1000);
  • adicione um componente de Query (depende do banco);
  • crie uma variável no Form do tipo TDateTime para armazenar a data e hora da última consulta (ultimaConsulta, por exemplo);
  • no método do Timer, faça algo como:

.

procedure Timer1Timer;
begin
  ComponenteDeQuery.Close;
  ComponenteDeQuery.Params.Items[0].AsDateTime := ultimaConsulta;
  ComponenteDeQuery.Open;

  ultimaConsulta := now; // atualiza a referência para a próxima consulta

  if not ComponenteDeQuery.IsEmpty then
    begin
      // aqui você avisa que existem novos registros, da forma que quiser
    end;
end;

O select no ComponenteDeQuery pode ser algo como:

select * from TABELA where DATAEHORADAINSERCAO >= :horariodereferencia

Obviamente, substitua TABELA e DATAEHORADAINSERCAO pelos seus campos correspondentes.

Abraço.

Poxa esta me ajudando demais, obrigado mesmo pela ajuda, abraços.