Atualizar os registros do banco de dados
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.
Obrigado a todos que puderem me ajudar.
Bjs.
Anjinho Loiro
Curtidas 0
Respostas
Ehvasc
17/03/2005
Cara Colega,
No OnCreate do form vc coloca uma Query que execute o seguinte comando:
Espero ter ajudado. Qualquer dúvida manda um email. Boa Sorte e até a próxima
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
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.
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
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.
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
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.
Prefiro a sua segunda sugestão. Se vc puder me dar uma dica de como fazer, eu agradeço.
Bjs.
GOSTEI 0
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
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.
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
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
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.
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
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
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
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.
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
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.
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
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.
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
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.
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
17/03/2005
Sobe[/url]
GOSTEI 0
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...
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