Insert com Loop?

Delphi

06/10/2005

Olá pessoal !

Alguém pode me ajudar nessa tarefa ?

Preciso fazer um loop inserindo informações em uma tabela,
Tenho três informações:

Hora Inicial, Hora Final e Duração

Preciso incluir registro em uma tabela incrementando a duração na hora inicial até chegar na hora final.

Tentei com While mais não deu certo, alguém pode me ajudar ?

Obrigada.


Renatacoimbra

Renatacoimbra

Curtidas 0

Respostas

Rjun

Rjun

06/10/2005

Por que não de certo com o WHILE? Poste o código para darmos uma olhada.


GOSTEI 0
Renatacoimbra

Renatacoimbra

06/10/2005

O código que testei vou assim:

[quote]While iHora <> fHora do begin
       iHora := ihora + Duracao;
       
      //Inset 
 end;



GOSTEI 0
Rjun

Rjun

06/10/2005

Não faça comparaçoes simples de igualdade com tipos DateTime pois eles são fracionários. Utilize comparações com maior igual ou menor igual.

while iHora < fHora do 
  iHora := ihora + Duracao; 



GOSTEI 0
Renatacoimbra

Renatacoimbra

06/10/2005

Mesmo assim não deu certo


 while not i >= f do begin
       i := i + Duracao;
       // Insert
      // ApplyUpdates
  end;




GOSTEI 0
Rjun

Rjun

06/10/2005

Que tipo são as variáveis i, f e Duracao? Sua aplicação entra no loop? Quais os valores iniciais de i e f? Que banco você esta usando?


GOSTEI 0
Renatacoimbra

Renatacoimbra

06/10/2005


i = HoraInicial  // Iniciada com 08:00 por exemplo
f = HoraFinal   // Iniciada com 18:00 por exemplo
Duracao = é o intervalo de um registro para o outro nos meus insert,
 o Valor dele pode ser 20 minutos

Eu Uso o banco Oracle.




GOSTEI 0
Siam

Siam

06/10/2005

Seus cpos i e f são TDatetime certo?
E o campo duracao ?


GOSTEI 0
Renatacoimbra

Renatacoimbra

06/10/2005

Esses são os tipos:

[b:5083568bc7]i, f: TDateTime
Duracao: Inteiro[/b:5083568bc7]


GOSTEI 0
Siam

Siam

06/10/2005

Quando vc soma um inteiro a um TDate, vc está somando dias.
É isso mesmo que vc quer ?


GOSTEI 0
Renatacoimbra

Renatacoimbra

06/10/2005

siam, brigada pela atenção !

Olha só:

i e f são TDateTime, eu uso só a hora dessas variaveis.
Duracao é inteiro, nessa variavel eu coloco a quantidade de minutos a incrementar, veja o código:

while not i >= f do begin 
       i := IncMinute(i, Duracao);  // IncMinute  da Unt DateUtils
       // Insert                             // i e a hora atual e Duracao são min 
                                               // a incrementar na hora      
 
  end; 






GOSTEI 0
Siam

Siam

06/10/2005

no While, o [b:8a56b4964a]not[/b:8a56b4964a] já é um dos operadores; então requer parenteses:
while not (i >= f) do begin



GOSTEI 0
Renatacoimbra

Renatacoimbra

06/10/2005

Valeu Siam, brigada !


perdir umas duas horas só por causa do ( ... )   :oops: 




Brigada mesmo.


GOSTEI 0
Siam

Siam

06/10/2005

De nada ! :D


GOSTEI 0
POSTAR