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.
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.