trabalhando com comparação de horas

22/01/2013

1

Alguem poderia me ajudar,
Estou com um date do oracle que guarda horas em uma agenda,,coloquei um datetime para que possa fazer a inclusao dos horários agendados,,minha dúvida é fazer comparações se já existe horario agendado ao sair da hora..fiz um locate no on exit

procedure TFDadosAgenda.DTPHoraInicialExit(Sender: TObject);
begin
if FViewAgenda.CDSAgendix.Locate(''HORARIOINICIALAGENDA'',DTPHoraInicial.Time,[]) then
begin
ShowMessage(''Horário já agendado'');
end;

end;

mas dá um erro could not parce sql timestamp string
Responder

Posts

23/01/2013

Joel Rodrigues

Veja o formato em que a hora está sendo retornada do banco e experimente converter DTPHoraInicial.Time para string antes de comparar.
Responder

23/01/2013

Evandro Viana

Veja o formato em que a hora está sendo retornada do banco e experimente converter DTPHoraInicial.Time para string antes de comparar.


nao dá com locate .....
tentei fazer o seguinte
procedure TFDadosAgenda.DTPHoraInicialExit(Sender: TObject);
var tempo01, tempo02 :TDateTime;
begin
tempo01 := FViewAgenda.CDSAgendix.FieldByName('HORARIOINICIALAGENDA').AsDateTime;
tempo02 := DTPHoraInicial.Time;

if TimeToStr(tempo01) = TimeToStr(tempo02)then
begin
ShowMessage(''Horário já agendado'');
end;

end;
Obs: Só consegue pegar o primeiro valor,,ele nao varre todos os valores...como eu posso ajeitar?
Responder

23/01/2013

Evandro Viana

Veja o formato em que a hora está sendo retornada do banco e experimente converter DTPHoraInicial.Time para string antes de comparar.


nao dá com locate .....
tentei fazer o seguinte
procedure TFDadosAgenda.DTPHoraInicialExit(Sender: TObject);
var tempo01, tempo02 :TDateTime;
begin
tempo01 := FViewAgenda.CDSAgendix.FieldByName('HORARIOINICIALAGENDA').AsDateTime;
tempo02 := DTPHoraInicial.Time;

if TimeToStr(tempo01) = TimeToStr(tempo02)then
begin
ShowMessage(''Horário já agendado'');
end;

end;
Obs: Só consegue pegar o primeiro valor,,ele nao varre todos os valores...como eu posso ajeitar?


Ele consegue somente fazer a comparação da primeira hora..as demais horas ele nao entra na condição
Responder

23/01/2013

Joel Rodrigues

Para ler todos os valores você precisaria fazer um loop no dataset:
FViewAgenda.CDSAgendix.First();
while not FViewAgenda.CDSAgendix.Eof do
begin
//fazer aqui
FViewAgenda.CDSAgendix.Next();
end
Responder

23/01/2013

Evandro Viana

vou tentar aqui,,wait
Responder

23/01/2013

Evandro Viana

vou tentar aqui,,wait

Desta forma ainda continua validando somente o primeiro valor,,porem com o loop (quantidade de vezes que ja tem horas registrada)informando a mensagem
Responder

23/01/2013

Evandro Viana

vou tentar aqui,,wait

Desta forma ainda continua validando somente o primeiro valor,,porem com o loop (quantidade de vezes que ja tem horas registrada)informando a mensagem


a mensagem de horario ja agendado aparece proporcional a quantidade de horario ja agendado,..a validação ainda somente no primeiro horario..
Responder

23/01/2013

Evandro Viana

vou tentar aqui,,wait

Desta forma ainda continua validando somente o primeiro valor,,porem com o loop (quantidade de vezes que ja tem horas registrada)informando a mensagem


a mensagem de horario ja agendado aparece proporcional a quantidade de horario ja agendado,..a validação ainda somente no primeiro horario..



procedure TFDadosAgenda.DTPHoraInicialExit(Sender: TObject);
var tempo01, tempo02 :TDateTime;
begin
tempo01 := FViewAgenda.CDSAgendix.FieldByName('HORARIOINICIALAGENDA').AsDateTime;
tempo02 := DTPHoraInicial.Time;
FViewAgenda.CDSAgendix.First();
while not FViewAgenda.CDSAgendix.Eof do
Begin
if TimeToStr(tempo01) = TimeToStr(tempo02)then
begin
ShowMessage(''Horário já agendado'');
break;
end;
FViewAgenda.CDSAgendix.Next();
end;

Só que no primeira informação so e valido o primeiro,,se eu for ve o segundo vez so valida a ultima
Responder

23/01/2013

Joel Rodrigues

Essas duas linha precisam estar dentro do loop:
tempo01 := FViewAgenda.CDSAgendix.FieldByName('HORARIOINICIALAGENDA').AsDateTime;
tempo02 := DTPHoraInicial.Time;
Responder

23/01/2013

Evandro Viana

Essas duas linha precisam estar dentro do loop:
tempo01 := FViewAgenda.CDSAgendix.FieldByName('HORARIOINICIALAGENDA').AsDateTime;
tempo02 := DTPHoraInicial.Time;


vou testar...
Responder

24/01/2013

Evandro Viana

Muito Obrigado pela ajuda ...
Agradeço ...Wlw
Responder

24/01/2013

Joel Rodrigues

Deu certo então?
Bacana, fico feliz em ter ajudado.
Um abraço e boa sorte em seus projetos.
Nesse caso, estou encerrando o tópico.
Responder

24/01/2013

Evandro Viana

Deu certo então?
Bacana, fico feliz em ter ajudado.
Um abraço e boa sorte em seus projetos.
Nesse caso, estou encerrando o tópico.


Deu certo sim,,obrigado por ter me ajudado...
Fico Feliz por ter pessoas iguais a vc ..
Responder