none
Verificar se CPF ja esta cadastrado

    Question

  • Ola Amigos

    Tenho um textBox, onde digitarei o CPF e gostaria de verificar se o CPF ja esta cadastrado, assim que o TextBox perder o foco.

    Estou utilizando o evento TextChanged, porem a execucao do programa, nao esta sendo direcionada para la.

    Poderiam me dizer, como resolver esse problema?


    Obrigado e um Abraco
    Monday, June 15, 2009 8:17 PM

All replies

  • Olá Ventana, você pode utilizar uma função javascript como esta (http://www.linhadecodigo.com.br/Dica.aspx?id=1080) e utilizar um controle chamado CustomValidator e associar a uma função sua que faça a validação do CPF.



    Felipe Oriani
    Tuesday, June 16, 2009 3:00 AM
  • Bom dia
    verifique se a propriedade AutoPostBack está true. Para fazer essa verificação é necessário um postback.
    Espero ter ajudado
    Tuesday, June 16, 2009 12:11 PM
  • Bom Dia Amigos e obrigado por sua ajuda.

    Rodrigo

    A propriedade AutoPostBack, estava como False e eu mudei para True e infelizmente nada aconteceu.

    Felipe

    Eu ja tenho a funcao para a consistencia dos dados, eu posso fazer o que voce sugeriu para verificar se o CPF ja existe na base de dados.

     

    Obrigado e um Abraco

     

    Tuesday, June 16, 2009 1:59 PM
  • Olá Ventana,

    Como o Felipe disse, utilize o CustomValidator. No tópico  abaixo eu falo sobre isso:

    http://social.msdn.microsoft.com/Forums/pt-BR/aspnetpt/thread/6feae2bf-3d47-4f87-9704-4901c46f308e

    []s
    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    Tuesday, June 16, 2009 3:19 PM
  • Obrigado mais uma vez por sua ajuda Robson.

    Li as informacoes do link que voce enviou e ainda nao obtive sucesso, pois aparentemente nada esta ocorrendo, com relacao a leitura ba base de dados para verificar se o CPF ja esta cadastrado.

    Estou conseguindo apenas verificar se o CPF esta correto ou nao, porem isso eu ja estava fazendo antes.

    Usei o CustomValidator, fui no evento ServerValidate e coloquei o meu codigo de pesquisa e nada.


    O que sera que fiz errado dessa vez.



    Obrigado e um Abraco

    Tuesday, June 16, 2009 7:33 PM
  • Bom, se está tudo ok com o CustomValidator, então o problema está no seu codigo.
    Basicamente é um select no banco e se nao retornar nada "seta" args.IsValid pra false, se achou "seta" pra true.

    Se puder coloque seu codigo (ou trecho) aqui e qual mensagem de erro ocorre (sempre que houver uma)

    []s


    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    Tuesday, June 16, 2009 8:51 PM
  • Boa tarde Robson, tudo bem?

    Aqui esta o meu codigo, demorei um pouco mas aqui estou de volta.


     Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate
            Dim Sql As String
            Dim cmd As SqlCommand
            Dim dr As SqlDataReader
    
            'pega valor do campo a ser validado
            Dim valor As String = args.Value
    
            Dim conexao As SqlConnection
    
            ' inicia como não-valido
            args.IsValid = False
    
            conexao = New SqlConnection(ConfigurationManager.ConnectionStrings("timesheet").ConnectionString)
    
            Sql = "SELECT USER_CPF FROM USERS WHERE USER_CPF =" & TCPF.Text
    
            cmd = New SqlCommand(Sql, conexao)
    
            conexao.Open()
            dr = cmd.ExecuteReader()
    
            ' aqui faz sua operacao (consulta no banco)
    
            ' se condicao for verdadeira, seta a validacao para true:       
    
            If dr.Read() = True Then
                MsgBox(" CPF JA CADASTRADO ")
                args.IsValid = True
            Else
                args.IsValid = False
            End If
            dr.Close()
            conexao.Close()
        End Sub

    <td style="width: 101px; height: 21px">
                        <asp:TextBox ID="TCPF"   runat="server"></asp:TextBox></td>
                    <td style="width: 100px; height: 21px">
                        <asp:CustomValidator ID="CustomValidator1" 
                                             runat="server" 
                                             ControlToValidate="TCPF"
                                             ErrorMessage="CPF Inválido"
                                             ClientValidationFunction="valida_CPFCNPJ"
                                             SetFocusOnError="True">
                         </asp:CustomValidator>
    </td>

    Acho que a funcao nao e necessaria.


    Obrigado e um Abraço
    Wednesday, June 17, 2009 7:56 PM
  • Olá

    Voce não disse o que está ocorrendo de errado!!!!

    1) No seu código, voce chama "valida_CPFCNPJ" para validação client-side. Isso está ok?

    2) Somente se passar da validacao client-side é que sera chamado o ServerValidate. Nele o que vi de errado é que voce inverteu o IsValid no final. Se o CPF já está cadastrado, voce deve validar como "false".

    Voce levou ao pé da letra o comentário "// se condicao for verdadeira, seta a validacao para true". O que eu quis dizer era "se a condição para prosseguir (validado ok) for verdadeira, seta ... para true. No seu caso, se há registros, deve ser "false" porque voce nao quer um CPF repetido.

    Outra coisa, no inicio do metodo voce ja pega o valor do campo a ser valido com "args.Value". Portanto, use-o na consulta ao inves do TCPF.Text.

    Acredito que seja só isso o problema.

    obs.: o que é a aquele MsgBox lá?!?!?! Essa mensagem voce configura nas propriedades ErrorMessage e/OU Text do CustomValidator.

    obs 2.: Não esqueça de checar se a pagina esta valida antes de prosseguir. Supondo que haja um botao Salvar na pagina que adiciona os dados em um database. Faça:

    if (Page.IsValid)
    {
         // inclusao no banco

    }


    []s
    Wednesday, June 17, 2009 8:26 PM
  • Obrigado por sua ajuda Robson.

    Bem, nao esta sendo gerado erro algum.Digito o CPF no textbox e automaticamente passo para o proximo campo.

    Coloquei uma pausa na linha do  CustomValidator1_ServerValidate e nao sou redirecionado para ela.


    1) No seu código, voce chama "valida_CPFCNPJ" para validação client-side. Isso está ok?
    Exato, executo uma funcao JavaScript que esta fazendo a consistencia do CPF, perfeitamente.

    Bem, acho que e so isso, pois ja fiz as outras alteracoes.

    Meu Deus e eu que pensei que ja soubesse bastante sobre isso tudo.
    Aparentemente eu me enganei.

     
    Aqui esta o codigo corrigido, mas como disse, ainda nao consigo executar essa sequencia.E agora?

    Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate
            Dim Sql As String
            Dim cmd As SqlCommand
            Dim dr As SqlDataReader
    
            'pega valor do campo a ser validado
            Dim valor As String = args.Value
    
            Dim conexao As SqlConnection
    
            ' inicia como não-valido
            args.IsValid = False
    
            conexao = New SqlConnection(ConfigurationManager.ConnectionStrings("timesheet").ConnectionString)
    
            Sql = "SELECT USER_CPF FROM USERS WHERE USER_CPF =" & args.Value
    
            cmd = New SqlCommand(Sql, conexao)
    
            conexao.Open()
            dr = cmd.ExecuteReader()
    
            ' se condicao for verdadeira, seta a validacao para false:       
    
            If dr.Read() = True Then
                args.IsValid = False
            Else
                args.IsValid = True
            End If
            dr.Close()
            conexao.Close()
        End Sub

    Obrigado e um Abraço
                      

    Wednesday, June 17, 2009 9:44 PM
  • Olá

    Se voce configurar corretamente as propriedades do validator, entao assim que voce sair do campo CPF, ele deverá indicar um erro (de acordo com seu metodo client-side javascript) (esse "erro" é a mensagem que voce coloca na propriedade Text do validator e aparece no local da pagina onde voce inseriu o validator).

    Se aparecer a msg (ou seja, controle invalido), voce muda para o proximo campo normalmente e pode ate clicar no botao Submit. Porém se seu controle esta invalido, o postback nao sera executado.

    Cheque seu metodo client-side (ele tbem deve setar o IsValid assim como no ServerValidate para funcionar com o validator - talvez voce esteja errando ai - poste aqui o metodo qquer coisa ). Se sua pagina nao esta entrando no metodo ServerValidate é porque nao foi dado um postback, ou seja, o metodo javascript setou o campo como invalido ou, pior, voce nao tem nenhum controle na pagina que de um postback, como um botao (acho q nao e o caso ne).

    Exemplo de um customvalidator com algumas propriedades setadas:

    <asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="ValidaAlgumaCoisa"
    ControlToValidate="textboxAValidar" ErrorMessage="Mensagem de erro a ser exibida" Display="Dynamic" OnServerValidate="CustomValidator1_ServerValidate" ToolTip="Mensagem de erro a ser exibida" EnableClientScript="False">Mensagem de erro a ser exibida </asp:CustomValidator>

    ErrorMessage - exibida no controle ValidationSumary
    Tooltip - exibida quando passa o mouse sobre o texto do validator
    Text (em negrito no codigo acima) - exibida no local onde esta o controle (normalmente coloca-se o validator ao lado do campo a ser validado).

    Exemplo de um metodo de validação client-side (javascript) (veja que se assemelha ao metodo server-side):

    <head>

    <script language="javascript" type="text/javascript">
        function ValidaAlgumaCoisa(source, args)
        {
            // valor do campo
            var valor = args.Value.split('');
           
            args.IsValid=false;

            // faz sua validacao usando o campo "valor" acima
            // por exemplo, validar o formato do campo
         
            if (<validacao ok>)
                args.IsValid = true;     
        }
    </script>   

    </head>

    Dê uma olhada em tudo. É uma coisa tão simples. Você deve estar se esquecendo de alguma coisa.

    []s


    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    Wednesday, June 17, 2009 11:43 PM
  • Obrigado mais uma vez por sua ajuda Robson, realmente voce tem sido muito paciente.
    Felizmente existe esse excelente forum para nos ajudarmos mutuamente.

    Enquanto verifico minha rotina de JavaScript, para ver se  o problema esta la , mais uma pergunta sobre um outro assunto sobre o qual eu me esqueci.

    Esss pontos que sao exibidos no perfil, tem alguma finalidade?

    Por enquanto eu tenho apenas 1 estrela e se eu passar no teste para a obtenção de outras ganharei mais pontos (provavelmente)?

    Ou esses pontos tem a ver com a frequencia com que post´s sao colocados ou respondifos?

    Obrigado e um Abraço

     

     

     

     

    Thursday, June 18, 2009 5:27 PM
  • Olá

    Os pontos aqui no forum voce adquire quando resposde a perguntas.
    Veja na FAQ como funciona: http://social.msdn.microsoft.com/Forums/pt-BR/help (no topico Sistema de Reconhecimento).

    Sobre o teste que voce se referiu, está falando sobre o programa 5 estrelas? Seja o que for, não tem nada a ver com essa pontuação do forum. A pontuação aqui do fórum é sobre a participação no mesmo (conforme link acima) e só isso!

    Qto à duvida original, de uma revisada ai. Qquer coisa, dê um alô que te envio um exemplo de um livro.

    []s

    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    Thursday, June 18, 2009 6:00 PM
  • Ok, obrigado pelas respostas.

    Quanto a minha duvida, ainda irei cuidar dela e claro mas depois que resolver uma outra.

    Vamos ver se esse topico sera um dos grandes.

     

    Obrigado e ate ja.

     

    Um Abraço 

    Thursday, June 18, 2009 6:04 PM