trabalhando com comparação de horas

Delphi

22/01/2013

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
Evandro Viana

Evandro Viana

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

22/01/2013

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

Evandro Viana

22/01/2013

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?
GOSTEI 0
Evandro Viana

Evandro Viana

22/01/2013

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
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/01/2013

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
GOSTEI 0
Evandro Viana

Evandro Viana

22/01/2013

vou tentar aqui,,wait
GOSTEI 0
Evandro Viana

Evandro Viana

22/01/2013

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
GOSTEI 0
Evandro Viana

Evandro Viana

22/01/2013

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..
GOSTEI 0
Evandro Viana

Evandro Viana

22/01/2013

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
GOSTEI 0
Carla Batista

Carla Batista

22/01/2013

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

Joel Rodrigues

22/01/2013

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

Evandro Viana

22/01/2013

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


vou testar...
GOSTEI 0
Evandro Viana

Evandro Viana

22/01/2013

Muito Obrigado pela ajuda ...
Agradeço ...Wlw
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/01/2013

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.
GOSTEI 0
Evandro Viana

Evandro Viana

22/01/2013

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 ..
GOSTEI 0
POSTAR