Fórum Notificações barra de status #623728
14/05/2025
0
Ao abrir o sistema, executo uma SQL que vai verificar se tenho cheques bons para desconto.
Se o retorno for positivo, exibo um label na barra de status.
Para isso , vou usar um Timer, que será executado apenas 1x, na abertura do sistema.
A dúvida é se devo usar no evento de OnShow ou OnActivate

Renan
Curtir tópico
+ 0Post mais votado
14/05/2025
Você precisa de um evento que ocorra após sua aplicação estar conectada ao banco de dados.
Eu, por exemplo, solicito o login e efetuo a conexão com o banco de dados de dentro do evento OnCreate do form principal, enquanto ele ainda está invisível.
Você poderia colocar esta checagem logo após a conexão e atualizar o status. Assim, quando o evento terminar e o form for exibido, a mensagem já estaria lá.
Caso você abra múltiplas vezes o mesmo form, mas queira exibir o status apenas na primeira vez, pode controlar a exibição através de uma constante tipada, que funciona como uma variável global, com valor pré-definido.
Assim, você checaria se é necessário exibir:
procedure ExibirMsgCheque; const exibido : boolean = false; begin if (not exibido) then begin // Exibir status exibido:=true; end; end;
Arthur Heinrich

Gostei + 1
Mais Posts
19/05/2025
Renan
Entendi e acho que realmente fica melhor.
Vou fazer essa rotina no form principal da aplicação, então na teoria ele será aberto apenas 1x ao dia.
Obrigado pela dica.
Gostei + 0
19/05/2025
Arthur Heinrich
Se você ficar com a aplicação aberta, de um dia para o outro, não mostrará a mensagem novamente.
Para que a mensagem seja exibida apenas uma vez ao dia, a rotina precisaria checar se já foi exibida naquele dia.
Além disso, se o sistema é acessado por múltiplos usuários, o controle de exibição precisa ser feito por usuário, provavelmente através de uma tabela no banco, cuja chave é o login do usuário, e armazenaria a data da última visualização.
Neste caso, a aplicação poderia verificar mais vezes a necessidade de exibir a mensagem, quando o dia muda sem que o usuário saia do sistema.
É bem mais complicado do que exibir apenas uma vez, durante a utilização do sistema, no início.
Gostei + 1
20/05/2025
Claudio Andrade
Ao abrir o sistema, executo uma SQL que vai verificar se tenho cheques bons para desconto.
Se o retorno for positivo, exibo um label na barra de status.
Para isso , vou usar um Timer, que será executado apenas 1x, na abertura do sistema.
A dúvida é se devo usar no evento de OnShow ou OnActivate
Se estiver usando o FireDac, veja o funcionamento do componente abaixo.
Ele serve exatamente para o que você quer sem comprometer a performance e consumo de recursos da máquina.
O componente fica "escutando" o banco de dados, e qualquer alteração que tiver nele você é notificado, e ai o céu é o limite.
https://docwiki.embarcadero.com/RADStudio/Sydney//en/Database_Alerts_(FireDAC)
Boa sorte na sua empreitada!
Gostei + 0
20/05/2025
Arthur Heinrich
Ao abrir o sistema, executo uma SQL que vai verificar se tenho cheques bons para desconto.
Se o retorno for positivo, exibo um label na barra de status.
Para isso , vou usar um Timer, que será executado apenas 1x, na abertura do sistema.
A dúvida é se devo usar no evento de OnShow ou OnActivate
Se estiver usando o FireDac, veja o funcionamento do componente abaixo.
Ele serve exatamente para o que você quer sem comprometer a performance e consumo de recursos da máquina.
O componente fica "escutando" o banco de dados, e qualquer alteração que tiver nele você é notificado, e ai o céu é o limite.
https://docwiki.embarcadero.com/RADStudio/Sydney//en/Database_Alerts_(FireDAC)
Boa sorte na sua empreitada!
A menos que o componente utilize alguma funcionalidade nativa, não recomendo que se utilize de sistemas que fazem queries periódicas para esta finalidade. Este tipo de consulta, assim como refresh automático de relatório a cada X tempo, acabam ficando no esquecimento, o usuário acaba não acompanhando e larga o sistema logado, consumindo recursos.
Sou especialista em tuning de bancos de dados. Já peguei vários casos onde 80% da carga do banco vinha de consultas automáticas como esta, ligadas a monitoramento do desempenho financeiro.
Muitas vezes, o cliente quer atualizar um painel para comparar o faturamento do mês atual com os meses anteriores, e executa queries que acessam muitos dados, mantendo os discos ocupados e gerando tempos de espera, à toa.
Começa com queries mais simples e vai piorando, até o dia que não funciona mais e ninguém se lembra para quê a query servia, nem em que ponto do sistema ela é executada.
Gostei + 0
21/05/2025
Renan
Eu devo executar essa consulta apenas para usuarios que possuem acesso a tela de cheques.
Ocorre que só vou saber quem será esse usuario quando ele logar(FrmLogin)
Deste modo, acredito que vou mesmo precisar usar o Timer com um delay de ao menos 2s após o Onshow do FrmPrincipal
Gostei + 0
22/05/2025
Claudio Andrade
Eu devo executar essa consulta apenas para usuarios que possuem acesso a tela de cheques.
Ocorre que só vou saber quem será esse usuario quando ele logar(FrmLogin)
Deste modo, acredito que vou mesmo precisar usar o Timer com um delay de ao menos 2s após o Onshow do FrmPrincipal
Evite fazer gambiarra, use o EventAlerter que atende para o que você esta precisando.
FDEventAlerter para FireDac
IBEventAlerter para IBObjects
[banco]EventAlerter para Zeos
UniAlerter para UniDac
Esses caras ai vão deixar seu código mais otimizado e mais fácil de dar manutenção, além de mais elegante.
A solução já existe, só utilizar.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)