Atualizar os registros do banco de dados

Delphi

17/03/2005

Tenho um sistema onde são cadastrados os débitos dos clientes de uma determinada empresa. Na hora do cadastro é colocado num campo chamado ´Situação´ a mensagem ´Em dias´. Como devo proceder para que no momento em que o form for aberto, ele assumir a mensagem ´Em atraso´ em todos os registros onde a data estiver vencida??? (Automaticamente).

Obrigado a todos que puderem me ajudar.

Bjs.


Anjinho Loiro

Anjinho Loiro

Curtidas 0

Respostas

Ehvasc

Ehvasc

17/03/2005

Cara Colega,


No OnCreate do form vc coloca uma Query que execute o seguinte comando:
 
UPDATE TABELA SET SITUACAO = ´Em Atraso´ 
WHERE VENCIMENTO < HOJE AND NÃO ESTIVEREM PAGOS (AQUI VC DEVE COLOCAR A VALIDAÇÃO QUE VC EXECUTA PRA SABER SE O DÉBITO ESTÁ PAGO)


Espero ter ajudado. Qualquer dúvida manda um email. Boa Sorte e até a próxima


GOSTEI 0
Anjinho Loiro

Anjinho Loiro

17/03/2005

Já tentei algo parecido, mas o problema é justamente na validação que não estou conseguindo.
Toda vez que entra o formulário trava e os botões do DBNavigato ficam piscando sem parar e aí, só CTRL+ALT+DELETE.

O resumo do que quero é isso, a data venceu, o campo situação assume o valor ´Está em atraso´.

Será que vc pode me dar um exemplo mais detalhado. Desculpe-me por bancar a chata.

Bjs.


GOSTEI 0
Gordonsp

Gordonsp

17/03/2005

Que banco de dados vc. esta utilizando?
Voce poderia criar uma procedure e deixar criar um JOB que a cada 6 horas ele verifique e atualize o status para vc., sendo assim nao precisaria fazer isso com nenhum codigo dentro de seu sistema, ou entao, pode executar essa procedure assim que abrir o sistema.
Qualquer duvida estarei a disposiçao.


GOSTEI 0
Anjinho Loiro

Anjinho Loiro

17/03/2005

Utilizo o Paradox, Query e Delphi 3 - Client/Server.

Prefiro a sua segunda sugestão. Se vc puder me dar uma dica de como fazer, eu agradeço.

Bjs.


GOSTEI 0
Marcio.theis

Marcio.theis

17/03/2005

Por quê no caso deve de ser um campo na base de dados???? Na minha opinião seria mais fácil você cirar um campo calculado e executar pelo calcfield, e sempre que navegar ele executa o calcfield e te atualiza na tela.


GOSTEI 0
Gordonsp

Gordonsp

17/03/2005

Concordo com vc., mas na minha opiniao, tudo o que puder fazer no banco eh melhor, pois vc. nao tem que ficar utilizando recursos extras para fazer uma coisa que num banco de dados eh meramente facil e na minha visao correta.
Hoje tudo o que desenvolvo e que tenha regras e recurso de banco, faço tudo no banco, por exemplo, insert, updates e relatorios, fica facil de dar manutençao, pois se voce nao alterar a regra do negocio, as alteracoes ficam mais facil.


GOSTEI 0
Marcio.theis

Marcio.theis

17/03/2005

Tudo bem tb concordo com vc... Mas no momento que um futuro cliente chega para vc e diz, ´Eu quero o sistema na base de dados X´ e esse banco não da suporte aos seus requerimentos de banco anteriores... Ai vc tera um problema, eu já sou mais a favor de colocar no código mesmo, temos aqui sistemas rodando direto em mais de cinco bd diferentes.


GOSTEI 0
Gordonsp

Gordonsp

17/03/2005

voce esta certo marcio, infelizmente eu todos os clientes que trabalho utilizam postgresql, sendo assim, consigo montar um padrao e, que facilita muito.
Os bancos que utilizo hoje sao: Mysql, Postgre, Oracle e SQL-Server, eu tenho desenvolvido padroes para todos esses bancos.
Valeu pela troca de informaçoes.


GOSTEI 0
Gordonsp

Gordonsp

17/03/2005

Irei pesquisar para voce como montar essa procedure em Paradox, uma vez que nunca utilizei esse banco.
Na minha opiniao, voce deveria pensar na possibilidade de futuramente migrar para um banco melhor(mais recursos).
Quero ver se ainda hoje vejo isso para vc.
Um grande abraço


GOSTEI 0
Andremuller

Andremuller

17/03/2005

No Paradox não há como criar procedimentos até porque Paradox não é um banco de dados, é sistema de arquivos, como DBF.

Como funciona esse seu form?
Normalmente o que acontece: seleciona-se um cliente e aparecem seus pagamentos. Faça então a atualização do status desses pagamentos preferencialmente sem utilizar query porque são muito muito lerdas qdo utiliza-se paradox com BDE.

Caso seja necessária uma atualização em massa, avalie pela quatindade de registros a possiblidade de utiliazar a query já enviada para esse tópico.
Caso a tabela seja muito grande, crie um rotina com while que certamente será mais rápida no caso de Paradox/BDE.


GOSTEI 0
Anjinho Loiro

Anjinho Loiro

17/03/2005

Como devo montar esse ´Do While´???

Bjs.



Obs>:
O form é assim

Venct. Cliente Valor Situação
20/03/05 NYVEA BEATRIZ R$ 25,00 Em dias
15/03/05 GUILHERME MOREIRA R$ 35,00 Em atraso

A situação é o que eu quero que mude automaticamente.


GOSTEI 0
Andremuller

Andremuller

17/03/2005

Se o form é só aquilo então você não deveria armazenar esse estado no banco.
Calcula na hora porque ele vai estar todo dia desatualizado.
Crie um campo calculado como um colega já sugeriu e verifique se está atrazado.


GOSTEI 0
Joaoshi

Joaoshi

17/03/2005

Colega,

Talvez o mais correto seria criar um campo calculado (como dito antes), já que esta informação mudaria a cada dia.

Adicionar os fields na TTable.
Criar o campo calculado

No onCalcfieds da Tabela:

if Data.Tabela >= Date then
Situacao.Text := ´Em Dias´
else
Situacao.Text := ´Em Atraso´;

Espero ter ajudado.


GOSTEI 0
Anjinho Loiro

Anjinho Loiro

17/03/2005

Sobe[/url]


GOSTEI 0
Pro-luck

Pro-luck

17/03/2005

Coloque no seu form um botão e passe para ele o seguinte código:


dm_.QrySuaQuery.First;
While not dm_.QrySuaQuery.EOF do
begin
if dm_.QrySuaQueryVencimento.Value < StrToDateTime(DateToStr(Now)) then
begin
dm_.QrySuaQuery.Edit;
dm_.QrySuaQuerySituacao.Text := ´Pendências´;
dm_.QrySuaQuery.Post;
dm_.QrySuaQuery.Next;
end
else
begin
dm_.QrySuaQuery.Edit;
dm_.QrySuaQuerySituacao.Text := ´Atualizado´;
dm_.QrySuaQuery.Post;
dm_.QrySuaQuery.Next;
end;
end;

Assim, no ínicio do expediente da empresa, clica-se uma vez sobre o botão ele faz a atualização que servirá até o dia seguinte...

Espero que te sirva e qualquer coisa manda um e-mail...


Beijos...


GOSTEI 0
POSTAR