Pular para o conteúdo
  • Este tópico contém 11 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 4 meses atrás por LeloStyle.
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #89312
    LeloStyle
    Participante

      Boa tarde pessoal,

      Estou precisando de uma ajuda de vcs para fazer um when-validate-item.
      Vamos lá tenho tres campos no meu forms: Bem, Carc bem e ramo, só que qndo o usuario digita preciso validar se esses campos constam na tabela RAMO_CARAC_BEM_SEGURADO.

      Alguém poderia me dar uam luz sobre isso, pois sou iniciante e ainda não tinha pegado algumas telas desde inicio para desenvolver.

      Desde já agradeço

      #89313
      Rodrigo Mesquita
      Participante

        Pelo que entendi vc quer ver se o valor digitado no campo, consta na tabela RAMO_CARAC_BEM_SEGURADO. Se quiser validar no momento em que o usuário deixar o field use do trigger, on-change no item. Se for no momento do comitt utiliza o when-validate-item.

        #89315
        LeloStyle
        Participante

          Rodrigoo,

          É mas ou menos isso, quando o usuario digita por exemplo 1 verifica se tem na tabela, se sim deicxa inserir, senao da mensagem de q não existe esse ramo por exemplo. Será que teria como me dar um exemplo de como fazer ?

          Desde já agradeço a ajuda

          Abraço

          #89317
          Rodrigo Mesquita
          Participante

            Lelo,

            Existe várias maneiras de fazer…umas delas é…

            crie um trigger on_change no item, depois coloque o código abaixo

            Declare
            Cursor c_Select Is Select coluna From tabela;
            Tselect tabela.coluna%Type;
            Begin
            Open c_select;
            Fetch c_select Into Tselect;
            If c_select%Notfound Then
            Null;
            message(‘valor nao existe na tabela’);
            End If;
            Close c_select;
            End;

            #89320
            LeloStyle
            Participante

              Rodrigo mas uma vez muito obrigado, compreendi da maneira que me passou. Mas estava fazendo assim será que daria para aproveitar essa ideia ou não ?

              begin
              select count(1)
              into :radesc.cd_tipo_bem_segurado
              from RAMO_CARAC_BEM_SEGURADO
              where cd_tipo_bem_segurado = :radesc.cd_tipo_bem_segurado;
              exception
              when no_data_found then
              mensagem ('Tipo Bem Segurado não Cadastrado.');
              raise form_trigger_failure;
              when others then
              mensagem ('Problemas ao Selecionar Registro em TIPO_BEM_SEGURADO. Erro: '||sqlerrm||' - (when-validate-item - controle.cd_tipo_bem_segurado).');
              raise form_trigger_failure;
              end;

              Valeww

              #89321
              Rodrigo Mesquita
              Participante

                da sim!

                Esta correto da maneira que vc fez tambem. Como falei, existe várias formas de fazer essa validação. Só que prefiro sempre que der utilizar um cursor, por que alem de ser na maioria das veses mais performáticos não tem necessidade de utilizar exceptions.

                #89324
                LeloStyle
                Participante

                  Rodrigo, valew cara !!!!
                  Só um probleminha !!!
                  Ele não ta validando o campoo lá to conseguindo inserir qualquer coisa !!!
                  Pode verificar o erro no meu códigooo ?

                  Muito obrigadoo

                  Abraço

                  #89330
                  Anônimo

                    Lelo, boa noite.

                    A melhor maneira para se validar é utilizando a trigger WHEN-VALIDATE-ITEM.

                    A ideia do seu código é boa, mas tem alguns erros:

                    Quando vc usa o comando COUNT(), tem que ter em mente que nunca cairá na exception NO_DATA_FOUND, pois este comando sempre retorna registro, ou seja, mesmo que não encontre nenhum registro que satisfaça a condição do WHERE, o SELECT COUNT(1) retornará 0 (ZERO), entendeu? Então, ou vc usa o COUNT() e logo abaixo da query faz uma validação para verificar se retornou ZERO ou vc usa um select sem COUNT e trata com a exception NO_DATA_FOUND, exemplos:

                    1) Utilizando o COUNT:

                    declare
                    l_contador number := 0;

                    begin
                    select count(1)
                    into l_contador
                    from RAMO_CARAC_BEM_SEGURADO
                    where cd_tipo_bem_segurado = :radesc.cd_tipo_bem_segurado;

                    if l_contador = 0 then
                    mensagem (‘Tipo Bem Segurado não Cadastrado.’);
                    raise form_trigger_failure;
                    end if;
                    exception
                    when others then
                    mensagem (‘Problemas ao Selecionar Registro em TIPO_BEM_SEGURADO. Erro: ‘||sqlerrm||’ – (when-validate-item – controle.cd_tipo_bem_segurado).’);
                    raise form_trigger_failure;
                    end;

                    2) Não utilizando o COUNT:

                    declare
                    l_validacao number;

                    begin
                    select 1
                    into l_validacao
                    from RAMO_CARAC_BEM_SEGURADO
                    where cd_tipo_bem_segurado = :radesc.cd_tipo_bem_segurado
                    and rownum < 2;
                    exception
                    when no_data_found then
                    mensagem ('Tipo Bem Segurado não Cadastrado.');
                    raise form_trigger_failure;
                    when others then
                    mensagem ('Problemas ao Selecionar Registro em TIPO_BEM_SEGURADO. Erro: '||sqlerrm||' – (when-validate-item – controle.cd_tipo_bem_segurado).');
                    raise form_trigger_failure;
                    end;

                    Utilizei o ROWNUM na segunda opção, pois caso esta tabela não tenha validação de chave primária, vc não terá problemas com retorno de mais de 1 registro.

                    Entendeu?

                    Abs

                    #89337
                    LeloStyle
                    Participante

                      Scheduardo,cara valew, deu uma puta clareada…

                      Pessoal,

                      Agora to conseguindo , ele compilouu sem erros, mas na hora de validar no forms, não ta validando. Então verifiquei que tem uma função no forms que trata milhares de validações, será que por isso não esta caindo nesse when-validate ?

                      Gratoooo

                      #89339
                      Rodrigo Mesquita
                      Participante

                        Lelo,

                        Verifique no trigger when-validade-item se antes do código que vc colocou existe algum bloco com validações e a linha RAISE FORM_TRIGGER_FAILURE pois essa linha interrompe o processamento e não executa o restante do código.

                        #89340
                        Anônimo

                          Lelo, bom dia.

                          No bloco desses itens existe também uma WHEN-VALIDATE-ITEM?

                          Vc tem certeza que o programa está executando esta trigger? Coloque mensagens e execute-o novamente p/ ver se elas são mostradas, assim terá certeza que o programa está executando esta trigger.

                          Abs

                          #89346
                          LeloStyle
                          Participante

                            Caras, muito obrigado pela ajuda, consegui resolver meu problema. Acontece que existiam uma triggers aqui q não eram de meu conhecimentos, pois sou novo em forms e aqui na empresa tbm. Comentei algumas delas e alterei alguma coisas e conseguii !!!

                            Valew

                            Abraço

                          Visualizando 12 posts - 1 até 12 (de 12 do total)
                          • Você deve fazer login para responder a este tópico.
                          plugins premium WordPress