Calculo com data e horas !

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
thebranco
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Ter, 04 Ago 2009 7:29 pm
Localização: santa cruz das palmeiras

Ola pessoal estou usando aqui o form 6i..
tenho o seguinte problema:
eu tenho os campos

Selecionar tudo

data_inicial    hora_inicial    data_final       hora_final  total_horas
01/01/2010       12:30        01/01/2010         12:40          X
o que eu gostaria que vocês me ajudassem a fazer este calculo...eu fiz de uma maneira simples que deu certo..porem quando a data final é o dia é maior que a data inicial num a certo porque ai estamos falando de mudança de dias.
usei este codigo:

Selecionar tudo

:dados_apont.total_hora := :dados_apont.dapt_hr_fin - :dados_apont.dapt_hr_ini;
outra coisa no banco eu declarei o campo hora_inicial e hora_final como varchar mas acho q num fiz a coisa certa.

Grato
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara duas coisas.

Quanto a teus campos de horas. Eu te aconselharia torna-los do tipo date e salvar a data junto.

Se fizeres isso o calculo seria tranquilo de ser feito.

Execute os selects abaixo e veja se os entende.

Selecionar tudo

SELECT SYSDATE, 1 FROM dual
UNION
SELECT SYSDATE + 1, 2 FROM dual
UNION
SELECT SYSDATE + 1/24, 3 FROM dual
UNION
SELECT SYSDATE  + 1/1440, 4 FROM dual
UNION
SELECT SYSDATE + 1/86400, 5 FROM dual
ORDER BY 2

SELECT SYSDATE FROM dual
UNION
SELECT SYSDATE + (SYSDATE - (SYSDATE- 1/86400) )FROM dual
thebranco
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 61
Registrado em: Ter, 04 Ago 2009 7:29 pm
Localização: santa cruz das palmeiras

Vlw pela força...
acabei dando um jeit aqui na siuação fazendo uma gambiarrinha que deu certo..da uma olhada no codigo:

Selecionar tudo

DECLARE
	PAR_DTINI DATE;
	PAR_DTFIN DATE;
	VAR_DIAS INTEGER;
	VAR_SEG INTEGER;
BEGIN
	PAR_DTINI :=TO_DATE(:DADOS_APONT.DAPT_DT_INI);
	PAR_DTFIN :=TO_DATE(:DADOS_APONT.DAPT_DT_FIN);
	IF 
		PAR_DTFIN > PAR_DTINI THEN
		VAR_DIAS := PAR_DTFIN - PAR_DTINI;
		VAR_SEG := VAR_DIAS * 86400;
	    :dados_apont.total_HORA := ((:dados_apont.dapt_hr_fin - :dados_apont.dapt_hr_ini) + VAR_SEG)/60/60;
	ELSE
		  :dados_apont.total_HORA := (:dados_apont.dapt_hr_fin - :dados_apont.dapt_hr_ini)/60/60;
	END IF;
	END;
este codigo me retorna o total de horas em numeros do jeito que eu queria..

bom tem otro probleminha xato aqui que não sei como resolvo
no form que eu criei...quando esta rodando, da akela msd perguntanto se eu desejo salvar as alterações sendo que não alterei nada isso da toda vez que eu fecho o form ou preciono F7 para habilitar uma query..

tem como fazer isso parar ?

grato
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara tu tem um bloco base table sendo alterado.

Da uma olhada se não tem nenhuma trigger que joga um valor para algum campo quando tu entra no form.

Alguma coisa ta sendo alterada.
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Quanto a teu código, tem algumas coisas estranhas.

O que eu quis te mostrar nos selects é que se tu subtrair variaves com data e hora tu consegue resultados em data e hora.

Mas enfim, se funcionou como tu precisava ok. So tem algumas coisas, tu não precisa convertar pra data variaveis declaradas como data.

VAR_SEG := VAR_DIAS * 86400; ?????

qual o valor do var_dias???
Responder
  • Informação