Delphi informar com antecendia a data do vencimento

Delphi

07/07/2012

Pessoal Boa tarde !
Estou fazendo um programa , e queria saber se tem como o D7 me informar com 45 dias antes que a data de vencimento de um contrato vai vencer ,ou que mudasse a cor da data de vencimento no DBgrid
Estou usando MYSQL, clientdaset,sqlquery.

Obrigado
Watson Rocha

Watson Rocha

Curtidas 0

Respostas

William

William

07/07/2012

Colega se vc só quiser mudar a cor da linha do DBGrid esse link já vai ajudar:
https://www.devmedia.com.br/alterando-cor-da-linha-de-um-dbgrid/3189

Só adeque a sua condição ao código...
GOSTEI 0
Watson Rocha

Watson Rocha

07/07/2012

Boa Noite wllfl
Não é isso que estou procurando,estou querendo assim.
Quando estiver faltando 45 dias antes de vencer a data do contrato que o delphi me enviasse uma mensagem na tela ou que o dbgrid mudasse de cor no campo da datafinal

Obrigado
GOSTEI 0
Wasley Portes

Wasley Portes

07/07/2012

Boa tarde, Watson.
Você tem duas opções, desenvolver uma rotina que fique rodando no servidor verificando a data de vencimento ou toda vez que inicializar o sistema executar a rotina de verificação da data de vencimento.

Essa rotina de verificação da data que enviará o email informando o vencimento.
Qualquer dúvida poste novamente.
GOSTEI 0
Watson Rocha

Watson Rocha

07/07/2012

Wasley Muito Obrigado pelo retorno , é isso mesmo que estou procurando, a segunda opção é perfeita.

toda vez que inicializar o sistema executar a rotina de verificação da data de vencimento

Wasley por favor vc pode me explicar como fazer isso !
No Aguardo.
Watson
GOSTEI 0
Deivison Melo

Deivison Melo

07/07/2012

Boa tarde Amigo,

Já pensou em desenvolver uma trigger que faça isso de forma automática para vc?

Ou caso deseje fazer a nível de sistema, deverá desenvolver uma rotina para verificar
essa data e tb para que visualmente fique intuitivo ao usuário faça com que a celula
do dbgrid mude de cor (cor que se adequar melhor ergonomicamente ao seu sistema) como
sugeriram acima.
GOSTEI 0
Watson Rocha

Watson Rocha

07/07/2012

Deivison é isso mesmo que gostaria ,mas nem imagino como fazer isso , sou novo na area,
Voce pode me ajudar ?

Obrigado
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

07/07/2012

Alguns passos básicos para este caso:
- Na inicialização do sistema, carregue um dataset com o select trazendo os títulos cujo vencimento é igual ou superior a data atual mais 45 dias;
- Verifique se este dataset contém registros, se contiver, avise (ou abra um form com os registros em questão).

Agora, você sabe usar queries, datasets, etc? Que engine de conexão com o banco você está usando? Que banco?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

07/07/2012

Desculpe a displicência, não vi que você deu as informações no primeiro post.
Segue um exemplo:
minhaQuery.Close();
minhaQuery.SQL := ´SELECT * FROM TABELA WHERE DATEDIFF(NOW, CAMPO_DATA) <= 45´;
minhaQuery.Open();
if minhaQuery.RecordCount > 0 then
   ShowMessage(´Existem títulos vencendo.´);

O exemplo é simples, apenas para te dar a ideia de como prosseguir.
GOSTEI 0
Watson Rocha

Watson Rocha

07/07/2012

Joel eu coloquei esse script em um botão e modifiquei a linha do select mas ta dando erro .

SQLQUERY1.Close();
SQLQUERY1.SQL.Add ( SELECT * FROM contrato WHERE DATAFIM(NOW, DATAFIM) => 45);
SQLQUERY1.Open();
if SQLQUERY1.RecordCount > 0 then
ShowMessage(Existem títulos vencendo.);

Desculpe a persistencia mas aonde estou errando ?

Obrigado
GOSTEI 0
Deivison Melo

Deivison Melo

07/07/2012

Dá uma olhada nesse tópico!

https://www.devmedia.com.br/mysql-triggers/8088

caso não conseguir evoluir me fala!
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

07/07/2012

WHERE DATAFIM(NOW, DATAFIM)...?
Não seria DATEDIFF?
GOSTEI 0
Alvaro Vieira

Alvaro Vieira

07/07/2012

Watson.

Como você diz que é novo na área, peço licença p/ dar umas dicas:
Tenha atenção quando copiar um exemplo ou postar uma dúvida, pois uma simples aspa faz toda a diferença e tentando te responder sobre o que pode estar errado (visto que você não descreveu o erro), observe que você trocou o nome da função indicada pelo Joel e não colocou as aspas conforme o exemplo.
Como uso o FireBird, não pude testar esse comando, (a sintaxe da função DATEDIFF é diferente).
Talvez o seu cód. ficasse correto assim:

SQLQuery1.Close();
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(SELECT * FROM CONTRATO WHERE DATEDIFF(NOW, DATAFIM) <= 45);
SQLQuery1.Open();

if SQLQuery1.RecordCount > 0 then
ShowMessage(Existem títulos vencendo.);

Abraço.
GOSTEI 0
Alvaro Vieira

Alvaro Vieira

07/07/2012

Watson.

Como você diz que é novo na área, peço licença p/ dar umas dicas:
Tenha atenção quando copiar um exemplo ou postar uma dúvida, pois uma simples aspa faz toda a diferença e tentando te responder sobre o que pode estar errado (visto que você não descreveu o erro), observe que você trocou o nome da função indicada pelo Joel e não colocou as aspas conforme o exemplo.
Como uso o FireBird, não pude testar esse comando, (a sintaxe da função DATEDIFF é diferente).
Talvez o seu cód. ficasse correto assim:

SQLQuery1.Close();
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(SELECT * FROM CONTRATO WHERE DATEDIFF(NOW, DATAFIM) <= 45);
SQLQuery1.Open();

if SQLQuery1.RecordCount > 0 then
ShowMessage(Existem títulos vencendo.);

Abraço.



Quanto a citação das aspas, desculpe-me, pois há um tempo não visitava esse Fórum devido alguns problemas que pensei já haviam sido resolvidos, mas percebo que as aspas simples que escrevemos são retiradas do código ao enviarmos a mensagem, lamentável...bem, caso ainda precise de ajuda, descreva o erro.
Abraço.
GOSTEI 0
Watson Rocha

Watson Rocha

07/07/2012

Imagina Avaro, fica Avontade em ajudar !

Esse comando eu coloco em um Botão é isso mesmo !

Origado
GOSTEI 0
Watson Rocha

Watson Rocha

07/07/2012

Alavaro fiz o que você me passou o me apresentou esse erro .coloquei esse comando num botão ao exetucar deu esse erro abaixo !

unKnown Column NOW in Where cluse
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

07/07/2012

Use NOW() como função (com parênteses).
GOSTEI 0
Watson Rocha

Watson Rocha

07/07/2012

joel Boa Noite !
Entao ficaria assim ,

SQLQuery1.Close();
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(SELECT * FROM CONTRATO WHERE DATEDIFF NOW(DATAFIM) <= 45);
SQLQuery1.Open();
if SQLQuery1.RecordCount > 0 then
ShowMessage(Existem títulos vencendo.);

Me perdoe a persistencia !
Estou aprendendo Muito Com vocês
Obrigado
Deus abençoe
GOSTEI 0
Watson Rocha

Watson Rocha

07/07/2012

??? alguem pode me ajudar
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

07/07/2012

Eis a estrutura correta:
SELECT * FROM TABELA WHERE DATEDIFF(NOW(), CAMPO_DATA) <= 45
GOSTEI 0
Watson Rocha

Watson Rocha

07/07/2012

Joel Gloria Deus , funcionou ! está tudo ok !

Muito Obrigado por tudo
Resolvido !
GOSTEI 0
Deivison Melo

Deivison Melo

07/07/2012

Já que foi solucionado...

Por favor, encerrar tópico!

Bons estudos!!!
GOSTEI 0
Watson Rocha

Watson Rocha

07/07/2012

RESOLVIDO
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

07/07/2012

Fico feliz por ter ajudado, Watson.
Boa sorte em seus projetos.
Estou encerrando este tópico.
GOSTEI 0
Alvaro Vieira

Alvaro Vieira

07/07/2012

Não Watson.
Como te escrevi, não testei o comando porque uso o Firebird, mas o que talvez o Joel tenha querido dizer seja isso:
Observe que a função NOW() está dentro da função DATEDIFF() e ela deve retornar a data atual, por isso uma função.

SQLQuery1.Close();
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(SELECT * FROM CONTRATO WHERE DATEDIFF(NOW(), DATAFIM) <= 45);
SQLQuery1.Open();

if SQLQuery1.RecordCount > 0 then
ShowMessage(Existem títulos vencendo.);

Abraço.
GOSTEI 0
POSTAR