Update com sysdate

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
  

Mensagemem Seg, 29 Ago 2016 5:49 pm

Boa tarde.

Uma dúvida técnica gente.
Como faço um update de uma coluna inserindo um sysdate?
Tenho o código do update abaixo:
Código: Selecionar todos
update dbamv.tabela set
obs1 = :ligar_t1.obs1,
dt_consulta = :ligar_t1.dt_consulta   ,
dt_ligacao1 = :ligar_t1.dt_ligacao1,
ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
commit;


A coluna é essa dt_ligacao1 = :ligar_t1.dt_ligacao1

Obrigado a todos.

Léo
leo_analista

Mensagemem Ter, 30 Ago 2016 7:53 am

Bom dia,

A resposta parece muito simples ou eu não captei o problema...

update dbamv.tabela set
obs1 = :ligar_t1.obs1,
dt_consulta = :ligar_t1.dt_consulta ,

dt_ligacao1 = sysdate,

ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
commit;
spernega
Localização: São Paulo - SP

Mensagemem Ter, 30 Ago 2016 8:22 am

spernega escreveu:Bom dia,

A resposta parece muito simples ou eu não captei o problema...

update dbamv.tabela set
obs1 = :ligar_t1.obs1,
dt_consulta = :ligar_t1.dt_consulta ,

dt_ligacao1 = sysdate,

ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
commit;



Cara eu também achei que era simples...
Já tinha feito isso e NÃO está salvando, muito estranho isso.
Já tentei to_char(sysdate,'dd/mm/yyyy') e nada!!!

Quando faz o update ele deixa NULL essa coluna de data...ele salva os outros dados porem a data não...

Vou colocar aqui todo o código do botão.

Código: Selecionar todos
declare
   alerta number;
   
begin
   
   if :ligar_t1.obs1 is null or :ligar_t1.ligar_n1 is null then
      alerta := show_alert('campo_nulo');
   else
      alerta := show_alert('campo_nao_nulo');      
   
   update tabela_nome set
          obs1 = :ligar_t1.obs1,
          dt_consulta = :ligar_t1.dt_consulta   ,
          dt_ligacao1 = sysdate,
          ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
commit;

:ligar_t1.nm_nome         := null;
:ligar_t1.tel1            := null;
:ligar_t1.tel2            := null;
:ligar_t1.cd_cidade         := null;
:ligar_t1.sexo            := null;
:ligar_t1.dt_preenchimento:= null;
:ligar_t1.dt_cadastro      := null;
:ligar_t1.obs1            := null;
:ligar_t1.dt_consulta      := null;
:ligar_t1.ligar_n1         := null;
      
      end if;
   end;



Valeu pela força!!!

Léo
leo_analista

Mensagemem Ter, 30 Ago 2016 8:35 am

Vamos tentar de outro jeito,

Tenta colocar um exception no procedimento pra ver se está dando algum erro.
e
Veja se existe alguma TRIGGER de base na tabela.
spernega
Localização: São Paulo - SP

Mensagemem Ter, 30 Ago 2016 8:56 am

spernega escreveu:Vamos tentar de outro jeito,

Tenta colocar um exception no procedimento pra ver se está dando algum erro.
e
Veja se existe alguma TRIGGER de base na tabela.


Bom dia!!!

Spernega sou bem novo em forms, tem como você me dar uma mão pra fazer esse exception.

É algo como isso?

Código: Selecionar todos
exception
     when :ligar_t1.dt_ligacao1 is null then
      message ('TESTANDO ERRO.') ;
     raise form_trigger_failure;


Implementando depois do end if e antes do end?

Valeu cara!!!

Léo
leo_analista

Mensagemem Ter, 30 Ago 2016 9:11 am

Isso mesmo, logo antes do END;

Você verificou se existe alguma TRIGGER de base nesta tabela?
spernega
Localização: São Paulo - SP

Mensagemem Ter, 30 Ago 2016 9:40 am

spernega escreveu:Isso mesmo, logo antes do END;

Você verificou se existe alguma TRIGGER de base nesta tabela?


Coloquei assim:
Código: Selecionar todos
exception
when others then
message ('TESTANDO ERRO.') ;
raise form_trigger_failure;


Não deu nada...
Passou direto, fez o update porem o campo de data vazio...

Não tem nenhum trigger nessa tabela.
leo_analista

Mensagemem Ter, 30 Ago 2016 9:51 am

Tenta executar assim:

pode ser que o UPDATE não esteja localizando nenhum registro.


declare
alerta number;
begin
if :ligar_t1.obs1 is null or :ligar_t1.ligar_n1 is null then
alerta := show_alert('campo_nulo');
else
alerta := show_alert('campo_nao_nulo');
--
update tabela_nome set
obs1 = :ligar_t1.obs1,
dt_consulta = :ligar_t1.dt_consulta ,
dt_ligacao1 = sysdate,
ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
--
if sql%notfound then
message ('Nenhum registro localizado') ;
pause;
else
message (sql%rowcount||' registros localizados');
pause;
end if;
--
commit;
--
:ligar_t1.nm_nome := null;
:ligar_t1.tel1 := null;
:ligar_t1.tel2 := null;
:ligar_t1.cd_cidade := null;
:ligar_t1.sexo := null;
:ligar_t1.dt_preenchimento:= null;
:ligar_t1.dt_cadastro := null;
:ligar_t1.obs1 := null;
:ligar_t1.dt_consulta := null;
:ligar_t1.ligar_n1 := null;
end if;
exception
when others then
message ('TESTANDO ERRO.') ;
raise form_trigger_failure;
end;
spernega
Localização: São Paulo - SP

Mensagemem Ter, 30 Ago 2016 10:04 am

msg01.JPG
spernega escreveu:Tenta executar assim:

pode ser que o UPDATE não esteja localizando nenhum registro.


declare
alerta number;
begin
if :ligar_t1.obs1 is null or :ligar_t1.ligar_n1 is null then
alerta := show_alert('campo_nulo');
else
alerta := show_alert('campo_nao_nulo');
--
update tabela_nome set
obs1 = :ligar_t1.obs1,
dt_consulta = :ligar_t1.dt_consulta ,
dt_ligacao1 = sysdate,
ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
--
if sql%notfound then
message ('Nenhum registro localizado') ;
pause;
else
message (sql%rowcount||' registros localizados');
pause;
end if;
--
commit;
--
:ligar_t1.nm_nome := null;
:ligar_t1.tel1 := null;
:ligar_t1.tel2 := null;
:ligar_t1.cd_cidade := null;
:ligar_t1.sexo := null;
:ligar_t1.dt_preenchimento:= null;
:ligar_t1.dt_cadastro := null;
:ligar_t1.obs1 := null;
:ligar_t1.dt_consulta := null;
:ligar_t1.ligar_n1 := null;
end if;
exception
when others then
message ('TESTANDO ERRO.') ;
raise form_trigger_failure;
end;



Fiz aqui...
Olha os prints o que deu...
Apareceu uma msg no segundo print de POR FAVOR ACEITE, de onde saiu isso???...kkkk
To ficando doido!!!...kkk
Anexos
msg02.JPG
leo_analista

Mensagemem Ter, 30 Ago 2016 10:12 am

kkkkkkkk a mensagem é por causa do pause.

vou alterar um pouco o script e já te mando de novo
spernega
Localização: São Paulo - SP

Mensagemem Ter, 30 Ago 2016 10:21 am

Tenta assim agora:
pra acompanhar os passos

declare
alerta number;
v_data_atualizada date;
begin
if :ligar_t1.obs1 is null or :ligar_t1.ligar_n1 is null then
alerta := show_alert('campo_nulo');
else
alerta := show_alert('campo_nao_nulo');
--
update tabela_nome set
obs1 = :ligar_t1.obs1,
dt_consulta = :ligar_t1.dt_consulta ,
dt_ligacao1 = sysdate,
ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
--
if sql%notfound then
message ('Nenhum registro localizado') ;
pause;
else
message (sql%rowcount||' registros localizados');
pause;
standard.commit;
--
If Form_Success Then
message ('Update realizado');
pause;
--
begin
select dt_ligacao1 into v_data_atualizada
from tabela_nome
where nm_nome = :ligar_t1.nm_nome;
--
message ('Data atualizada para '||to_char(v_data_atualizada ,'dd/mm/yyyy hh24:mi:ss'));
pause;
exception
when others then
message ('Erro ao buscar date '||sqlerrm(sqlcode));
pause;
end;
else
message ('erro no commit '||dbms_error_text);
pause;
end if;
end if;
--
:ligar_t1.nm_nome := null;
:ligar_t1.tel1 := null;
:ligar_t1.tel2 := null;
:ligar_t1.cd_cidade := null;
:ligar_t1.sexo := null;
:ligar_t1.dt_preenchimento:= null;
:ligar_t1.dt_cadastro := null;
:ligar_t1.obs1 := null;
:ligar_t1.dt_consulta := null;
:ligar_t1.ligar_n1 := null;
end if;
exception
when others then
message ('TESTANDO ERRO.') ;
raise form_trigger_failure;
end;
spernega
Localização: São Paulo - SP

Mensagemem Ter, 30 Ago 2016 10:38 am

spernega escreveu:Tenta assim agora:
pra acompanhar os passos

declare
alerta number;
v_data_atualizada date;
begin
if :ligar_t1.obs1 is null or :ligar_t1.ligar_n1 is null then
alerta := show_alert('campo_nulo');
else
alerta := show_alert('campo_nao_nulo');
--
update tabela_nome set
obs1 = :ligar_t1.obs1,
dt_consulta = :ligar_t1.dt_consulta ,
dt_ligacao1 = sysdate,
ligar_n1 = :ligar_t1.ligar_n1
where nm_nome = :ligar_t1.nm_nome;
--
if sql%notfound then
message ('Nenhum registro localizado') ;
pause;
else
message (sql%rowcount||' registros localizados');
pause;
standard.commit;
--
If Form_Success Then
message ('Update realizado');
pause;
--
begin
select dt_ligacao1 into v_data_atualizada
from tabela_nome
where nm_nome = :ligar_t1.nm_nome;
--
message ('Data atualizada para '||to_char(v_data_atualizada ,'dd/mm/yyyy hh24:mi:ss'));
pause;
exception
when others then
message ('Erro ao buscar date '||sqlerrm(sqlcode));
pause;
end;
else
message ('erro no commit '||dbms_error_text);
pause;
end if;
end if;
--
:ligar_t1.nm_nome := null;
:ligar_t1.tel1 := null;
:ligar_t1.tel2 := null;
:ligar_t1.cd_cidade := null;
:ligar_t1.sexo := null;
:ligar_t1.dt_preenchimento:= null;
:ligar_t1.dt_cadastro := null;
:ligar_t1.obs1 := null;
:ligar_t1.dt_consulta := null;
:ligar_t1.ligar_n1 := null;
end if;
exception
when others then
message ('TESTANDO ERRO.') ;
raise form_trigger_failure;
end;




Cara agora foi...fez o update da data...sysdate!!!
Da uma olhada nos prints por favor.
Anexos
msg03.JPG
msg02.JPG
msg01.JPG
leo_analista

Mensagemem Ter, 30 Ago 2016 10:44 am

Bom, não deram todas as mensagens que coloquei, mas se fez é o que importa.

Talvez seja por que mudamos para standard.commit.
spernega
Localização: São Paulo - SP

Mensagemem Ter, 30 Ago 2016 10:53 am

spernega escreveu:Bom, não deram todas as mensagens que coloquei, mas se fez é o que importa.

Talvez seja por que mudamos para standard.commit.



Mas o que exatamente fez o update do sysdate?
Continua sendo o dt_ligacao1 = sysdate?
Ou foi uma ajuda desse begin?

begin
select dt_ligacao1 into v_data_atualizada
from dbamv.bariatrica_hevv
where nm_paciente = :ligar_t1.nm_paciente;
leo_analista

Mensagemem Ter, 30 Ago 2016 11:09 am

o update gravou o sysdate (daquele momento) no campo dt_ligacao1.

Esse begin foi só pra verificar se o standard.commit foi realizado com sucesso e o campo atualizado na tabela.

Quando a gente executa um insert, update ou delete num forms, que é o seu caso, a gente usa o standard.commit ou seja, ele executa o commit apenas destas ações e mas não executa o commit das atualizações feitas nos blocos base table do forms.

Depois seria bom você revisar o forms, pra ver se há a necessidade deste update.

Se o seu bloco for base table, você poderia apenas atribuir o sysdate ao campo e dar um commit_form.
E se for base table, poderia estar dando conflito entre a tela e o update.
spernega
Localização: São Paulo - SP

Mensagemem Ter, 30 Ago 2016 11:18 am

spernega escreveu:o update gravou o sysdate (daquele momento) no campo dt_ligacao1.

Esse begin foi só pra verificar se o standard.commit foi realizado com sucesso e o campo atualizado na tabela.

Quando a gente executa um insert, update ou delete num forms, que é o seu caso, a gente usa o standard.commit ou seja, ele executa o commit apenas destas ações e mas não executa o commit das atualizações feitas nos blocos base table do forms.

Depois seria bom você revisar o forms, pra ver se há a necessidade deste update.

Se o seu bloco for base table, você poderia apenas atribuir o sysdate ao campo e dar um commit_form.
E se for base table, poderia estar dando conflito entre a tela e o update.




Prezado spernega.

Muito obrigado pela atenção.

Você ajudou bastante.

Vou verificar o que você falou sobre o bloco.

Mais um vez obrigado!!!

Léo
leo_analista

Mensagemem Ter, 30 Ago 2016 12:46 pm

spernega escreveu:o update gravou o sysdate (daquele momento) no campo dt_ligacao1.

Esse begin foi só pra verificar se o standard.commit foi realizado com sucesso e o campo atualizado na tabela.

Quando a gente executa um insert, update ou delete num forms, que é o seu caso, a gente usa o standard.commit ou seja, ele executa o commit apenas destas ações e mas não executa o commit das atualizações feitas nos blocos base table do forms.

Depois seria bom você revisar o forms, pra ver se há a necessidade deste update.

Se o seu bloco for base table, você poderia apenas atribuir o sysdate ao campo e dar um commit_form.
E se for base table, poderia estar dando conflito entre a tela e o update.



Prezado, encontrei uma coisa no standard.commit

Quando clico em atualizar o form faz a atualização, porem quando clico no botão sair e volto novamente nessa tela ele pede para salvar, acredito que é devido o standart.commit.

E quando clico em SIM em atualizar ele deleta a linha outrora atualizada.

Tem alguma dica?

Como faço para que quando volte na mesma tela ele não me mostre essa pergunta, DESEJA ATUALIZAR?

Valeu cara.
leo_analista

Mensagemem Ter, 30 Ago 2016 12:54 pm

É por que o seu bloco é base table e você também está fazendo o update direto na tabela.
Ou seja, está fazendo duas vezes.

É melhor você tentar tratar só pelo bloco no FORMS sem o update.
spernega
Localização: São Paulo - SP

Mensagemem Ter, 30 Ago 2016 2:46 pm

spernega escreveu:É por que o seu bloco é base table e você também está fazendo o update direto na tabela.
Ou seja, está fazendo duas vezes.

É melhor você tentar tratar só pelo bloco no FORMS sem o update.


Desculpe a minha ignorância cara
Como seria feito esse tratamento no forms sem o update?
Sendo que estou exibindo os dados de um cadastro contido em uma tabela do banco e preciso atualizar esse caadastro com um update.
Novamente obrigado.
Léo
leo_analista

Mensagemem Ter, 30 Ago 2016 2:59 pm

Quando você criou o bloco ligar_t1, foi com Data Block Wizard, referenciando uma tabela?

Na tela existe algum outro bolco base table que está sofrendo uma alteração ou inclusão.
Por isso pede pra salvar antes de sair.
spernega
Localização: São Paulo - SP


Próximo

Voltar para Forms

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes