Giovani, primeiramente desculpe se te ofendi dizendo para não fazerem
aquilo.
Agora sobre a degradação de performance...
Executando do modo que vc havia dito, o servidor faria um full table scan,
encaminhando todo o resultado pela rede.
Até aqui vc degradaria o tráfego da rede. Imagine o seguinte cenário:
conectado por Dial-up em um servidor remoto, por linha discada a 56Kbps. Seu
link estaria completamente comprometido, isso sem contar que você pode ter
milhões de registros transitando nesse link.
Sobre o loop... princípios de best pratices. Todo loop degrada a performance
de qualquer aplicação, portanto use com moderação.
Eu executei um loop básico que segue abaixo

For Contador:= 1 to 300000 do

Essa simples instrução no meu servidor durou apenas 5 segundos. E olha que
300000 registros retornados é facilmente obtido por uma query simples.
A mesma instrução variando de 1 a 1000000 durou 13 segundos.
Esse mesmo loop foi executado em máquinas clientes e duraram 15% a mais.
Outro motivo. Utilize sempre a arquitetura cliente-servidor. Como o servidor
é uma máquina com maior capacidade de processamento, porque trazer o
trabalho para uma máquina de menor capacidade? Mesmo que essa rotina seja
executada uma vez por mês, não existe o porquê trazer o processamento para
uma máquina de menor capacidade.
Outro fator para melhorar a performance, é fazer essa rotina como Stored
Procedure. Já aconteceu de rotinas que haviam sido implementadas no cliente
que foram transformadas em Stored Procedures que melhoraram o tempo de
resposta em 35%.
Bem, agora sobre fevereiro... Realmente do modo que coloquei no meu exemplo
não prevê os 28 ou 29 dias de fevereiro. É um caminho das pedras, e não a
solução pronta. O que deve ser feito é tratar sempre pelo mês, ou seja,
criar uma rotina para tirar três meses e retornar a data base.
Quanto aos diferentes dias de vencimento, como foi dito no e-mail, só serve
o exemplo que passei se a rotina for para 90 dias CORRIDOS a partir do
vencimento. Caso a rotina seja por dias acumulados, deve-se fazer com um
loop. Nesse caso recomendo implementar em uma Stored Procedure e retorar
apenas os usuários que estão em atraso a 90 dias ACUMULADOS.
E os que foram pagos mesmo fora do vencimento, não estão atrasados, pois já
foram pagos.

Sem mais.


-----Mensagem original-----
De: Giovani - Terra [mailto:[EMAIL PROTECTED] 
Enviada em: terça-feira, 15 de fevereiro de 2005 18:41
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: [delphi-br] Re: Mensalidades...


Sr. Rodrigo...

E em fevereiro?
E quando o pagamento for feito em dias diferenciados?
Nunca fale NÃO FAÇA ISSO para alguém que está tentando ajudar, ok?
O negócio é o seguinte...
Quando alguém pede uma ajuda, está tentando solucionar um problema. O fato é
que existem n maneiras para solucionar o mesmo problema. Se você pensa
diferente do que eu penso, ótimo, pois isso é baseado no fator humano.

Outra coisa... Porque sacrificar a performance dentro de um loop?
Isso vai ser feito para um UNICO CLIENTE, e somente em 3 meses... Não
entendi aí o fator performance. Gostaria que fosse explanado.



  ----- Original Message ----- 
  From: Rodrigo Villaverde 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Tuesday, February 15, 2005 3:02 PM
  Subject: RES: [delphi-br] Re: Mensalidades...


  Não faça isso! Não sacrifique a performance do seu aplicativo!

  Resolva isso com uma instrução SQL

  Const
  DiasAtrazados= 90;

  Var
  DataLimite: TDateTime;

  DataLimite:= Now - DiasAtrazados;

  ...

  Dentro da sua cláusula where coloque a seguinte condição

  DataVencimento < DataLimite

  Se a pesquisa retornar vazia, é sinal que não existem mensalidades com
mais
  de 3 meses de atraso.
  Mas isso só vai funcionar se o período que quer medir é dias corridos à
  partir do vencimento. Se for por dias acumulados de todos os atrasos, a
  cláusula where acima não irá funcionar.


  ----------

No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.300 / Virus Database: 265.8.8 - Release Date: 14/2/2005


[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos




 






-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a