Fórum Notificações barra de status #623728

14/05/2025

0

A ideia é simples...
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

Renan

Responder

Post mais votado

14/05/2025

Eu não utilizaria um timer.

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

Arthur Heinrich
Responder

Gostei + 1

Mais Posts

19/05/2025

Renan

Olá, Arthur.

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

Gostei + 0

19/05/2025

Arthur Heinrich

A mensagem seria exibida uma vez, a cada abertura do programa.

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

Gostei + 1

20/05/2025

Claudio Andrade

A ideia é simples...
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!
Responder

Gostei + 0

20/05/2025

Arthur Heinrich

A ideia é simples...
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.
Responder

Gostei + 0

21/05/2025

Renan

Estou com um pequeno impasse em usar a rotina no evento de OnCreate do FrmPrincipal...

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
Responder

Gostei + 0

22/05/2025

Claudio Andrade

Estou com um pequeno impasse em usar a rotina no evento de OnCreate do FrmPrincipal...

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

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar