ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

HORA

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
28440959842
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 166

MensagemEnviada: Qua Out 17, 2012 8:38 pm    Assunto: HORA Responder com Citação

Amigos!

Olha eu novamente!!

tenho um campo em uma tabela no oracle, campo este com as seguintes informação:

31/12/1899 18:00:00 - nome do campo (turno_i) que é turno inicial

o que gostaria de fazer subtrair horário atual com 18:00:00

tentei fazer assim

select to_char(turno_i,'hh24:mm:ss') - to_char(sysdate,'hh24:mm:ss') from tabela

mas não vai, ou quando roda aparece um número maluco.

Alguém pode me ajudar?

Abraços!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Qui Out 18, 2012 12:28 am    Assunto: Responder com Citação

Aquele Select com o Trunc não deu certo?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
28440959842
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 166

MensagemEnviada: Qui Out 18, 2012 7:55 am    Assunto: Hora Responder com Citação

Caro amigo Batera!

O select com o Trunc funciona com data atual, mas por exemplo com data default 31/12/1899 18:00:00 traz um número muito alto!

abraços!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Qui Out 18, 2012 1:00 pm    Assunto: Responder com Citação

Fala caro amigo!
Mas fiquei com uma dúvida... por quê você precisa fazer um cálculo com a data default de 1899?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
28440959842
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 166

MensagemEnviada: Qui Out 18, 2012 6:26 pm    Assunto: Hora Responder com Citação

Amigo, vou tentar explicar, vai que você me sugira outra lógica

Estou desenvolvendo um software para apontamento de Mecanicos (automotivo), então tenho a seguinte estrutura:

Uma tabela que grava os apontamentos e motivo de parada, e outra tabela de turno.

Então na tabela de turno tenho o turno do cara que seria:

código, turno_i, turno_f

onde o turno_i é o turno inicial.

Todo dia quando um mecânico acessa a aplicação, o sistema faz um select na tabela de apontamentos, se o Recorcount for =0 o sistema pega a hora atual (sysdate), e subtrai pela bora inicial de seu turno, para dizer o seguinte: "Você está a x horas parado", justifique o motivo.


Por isso que queria pegar a hora atual e subtrair com o horário de turno dele.

Também usarei este campo para validar se o horário que ele está tentando acessa é de seu turno!

Caro amigo, será que tem uma lógica melhor para eu fazer esta subtração?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Qui Out 18, 2012 9:40 pm    Assunto: Responder com Citação

Citação:
o sistema faz um select na tabela de apontamentos

Como é esse Select?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
28440959842
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 166

MensagemEnviada: Sex Out 19, 2012 12:27 am    Assunto: Responder com Citação

Caro Amigo.

O Select abaixo, usei para quando um mecânico finalizar uma ordem de serviço, e por algum motivo, não houve um próximo apontamento, ai quando ele for tentar apontar o sistema usa o select , mas são datas atuais, ou melhor datas do mesmo dia, Abaixo o select que usei e deu certo para esta situação:

select trunc(( (sysdate - (max(fic_hr_fim))) * 86400 / 3600)) ||':' ||
trunc(mod( (sysdate - (max(fic_hr_fim))) * 86400 , 3600 ) / 60 ) || ':'||
trunc(mod ( mod ( (sysdate - (max(fic_hr_fim))) * 86400, 3600 ), 60 ))
as Data from ga_ofi_ficha_mec_itens where cod_func='''+edt1.text+''''

mas para o bendita data defalult não consigo!

Se puder me ajudar agradeço muito!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Sex Out 19, 2012 1:06 am    Assunto: Responder com Citação

Ele funciona com a data atual porque você está utilizando o sysdate. Esse mesmo Select não funcionaria se você substituísse o sysdate pela data que você informasse?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
28440959842
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 166

MensagemEnviada: Sex Out 19, 2012 9:18 am    Assunto: Responder com Citação

Isso não seria legal, pois o select roda na criação do form, e é interessante ser o systate pois é a data e hora atual, e o sistema confirma com a tabela o turno do cara!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Sáb Out 20, 2012 10:53 am    Assunto: Responder com Citação

Hum, deixa eu entender melhor então...
Vamos supor que eu sou um funcionário e o meu turno começa às 8 horas, ok? Certo dia, eu acessei a aplicação às 9 horas. O sistema vai rodar o Select na inicialização e realizar o cálculo:
Código:
9:00 - 8:00 = 1 hora

E então a aplicação vai mostrar a mensagem:
Citação:
Você está há 1 hora(s) parado, justifique o motivo."

É isso mesmo?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
28440959842
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 166

MensagemEnviada: Sáb Out 20, 2012 11:36 am    Assunto: Responder com Citação

Caro amigo, perfeito, é isso mesmo!

Abraços!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Sáb Out 20, 2012 9:06 pm    Assunto: Responder com Citação

Entendi...
Então todos os dias a aplicação vai realizar esse cálculo das horas considerando a hora atual menos o turno inicial, certo?
Só não entendi aonde que a data default entra nessa história...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
28440959842
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 166

MensagemEnviada: Dom Out 21, 2012 8:24 am    Assunto: Responder com Citação

exatamente isso, o motivo da hora default é que o campo é date, e a data eu não irei usar para nada, apenas a hora!

Abraços!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Batera
Colaborador
Colaborador


Registrado: Quarta-Feira, 23 de Julho de 2008
Mensagens: 4899
Localização: Maringá

MensagemEnviada: Dom Out 21, 2012 10:52 am    Assunto: Responder com Citação

O banco de dados é Firebird, não é?
Se você for trabalhar comente com horas, pode usar o tipo de dados TIME.
Dê uma olhada depois neste link pra ver as diferenças:

http://www.janus-software.com/fbmanual/manual.php?book=psql&topic=41
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
28440959842
Aprendiz
Aprendiz


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 166

MensagemEnviada: Dom Out 21, 2012 9:03 pm    Assunto: Responder com Citação

Caro amigo, o Banco é Oracle, mas vou fazer este tratamento diretamente no Delphi, para ver se da certo!

Muito obrigado pela ajuda e paciência!

Abraços!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB