none
Validar Antes de Salvar RRS feed

  • Pergunta

  • Boa tarde, como faço uma verificação antes de efetivar em Banco?
    T
    enho esse código abaixo:

    Code Snippet

    If VerificaHexaCadastrado(edtHexa.Text) Then 'Verifica se encontrou
    MessageBox.Show("Hexadecimal já cadastrado.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    edtCodigo.Focus()
    Else
    For i As Integer = 0 To Int(edtQtdd.Text) - 1
    Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\Server\Pagina_ASP\Dados\HexaCelular.mdb")
    Dim cmd As New OleDbCommand("Insert into CadHexaCelular(CodProduto, DescProduto, DataEntCentral, Loja, HexaCel) values (@Cod, @Desc, @Data, @Loja, @Hexa)", conn)

    conn.Open()
    cmd.Parameters.Add(New OleDbParameter("@Cod", edtCodigo.Text))
    cmd.Parameters.Add(New OleDbParameter("@Desc", lblDescricao.Text))
    cmd.Parameters.Add(New OleDbParameter("@Data", FormatDateTime(CDate(edtData.Text), DateFormat.GeneralDate)))
    cmd.Parameters.Add(New OleDbParameter("@Loja", cboxLoja.Text))

    'Verifica se o campo hexadecimal está em branco ou menor que 15 caracteres
    If (Len(edtHexa.Text) < 15) Or (Len(edtHexa.Text) > 15) Then
    Dim hexa As String = InputBox("Hexadecimal (Núm.: " & CStr(i) + 1 & ") :", "Digite o Hexadecimal")
    If (VerificaHexaCadastrado(hexa) = True) Or ((Len(hexa) < 15) Or (Len(hexa) > 15)) Then
    edtHexa.Text = InputBox("Hexadecimal já cadastrado ou com quantidade de caracteres diferente de 15." & _
    "(Núm.: " & CStr(i) + 1 & ") :", "Digite o Hexadecimal")
    End If
    edtHexa.Text = hexa
    End If

    cmd.Parameters.Add(New OleDbParameter("@Hexa", edtHexa.Text))
    edtHexa.Text = ""

    cmd.ExecuteNonQuery()

    conn.Close()
    Next i
    MessageBox.Show("Celulares cadastrados com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Controles()
    LimpaControles()

    End If


    Nesse trexo, ele faz uma verificação se o campo digitado possui exatamente 15 posições, mas se o usuário digitar errado na primeira vez, ele retorna pedindo o correto, porem se é digitado errado pela segunda vez, ele aceita, como posso resolver esse dilema?
    Code Snippet

    If (Len(edtHexa.Text) < 15) Or (Len(edtHexa.Text) > 15) Then
    Dim hexa As String = InputBox("Hexadecimal (Núm.: " & CStr(i) + 1 & ") :", "Digite o Hexadecimal")
    If (VerificaHexaCadastrado(hexa) = True) Or ((Len(hexa) < 15) Or (Len(hexa) > 15)) Then
    edtHexa.Text = InputBox("Hexadecimal já cadastrado ou com quantidade de caracteres diferente de 15." & _
    "(Núm.: " & CStr(i) + 1 & ") :", "Digite o Hexadecimal")
    End If
    edtHexa.Text = hexa
    End If


    Sou novato com Windows Forms.

    Estou usando VS2k8 e Access

    quinta-feira, 18 de dezembro de 2008 16:29

Respostas

  • Consegui! Segue o trecho que alterei.


                    'Verifica se o campo hexadecimal está em branco ou menor que 15 caracteres

                    If edtHexa.Text.Length <> 15 Then
                        While edtHexa.Text = String.Empty
                            Dim Hexa As String = InputBox("Hexadecimal (Núm.: " & CStr(i) + 1 & "): ", "Digite o Hexadecimal")
                            While (VerificaHexaCadastrado(Hexa) = True) Or (Hexa.Length <> 15)
                                Hexa = InputBox("Hexadecimal inválido." & vbCrLf & vbCrLf & vbCrLf & "(Núm.: " & CStr(i) + 1 & ") :", "Digite o Hexadecimal")
                            End While
                            edtHexa.Text = Hexa
                        End While
                    End If
    sexta-feira, 19 de dezembro de 2008 12:05

Todas as Respostas

  • Olá Facc.

    Aconselho você colocar a sua função de validação no evento Validating do seu edtHea (textbox espero).

     

    Code Snippet

    Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As  System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating

       If TextBox1.Text.Length <> 15 Then

          MessageBox.Show("Voce nÆo digitou o numero correto de caracteres", "Aten‡Æo")

          e.Cancel = True

          Exit Sub

       End If

    End Sub

     

     

     

    Esse evento ocorre antes do foco sair do controle. Caso o dado inserido esteja errado, vc cancela o usuário de sair deste controle (e.cancel = true).

     

    Espero ter ajudado.

    t+

    quinta-feira, 18 de dezembro de 2008 17:38
  •  Ric4rd0 wrote:

    Olá Facc.

    Aconselho você colocar a sua função de validação no evento Validating do seu edtHea (textbox espero).

     

    Code Snippet

    Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As  System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating

       If TextBox1.Text.Length <> 15 Then

          MessageBox.Show("Voce nÆo digitou o numero correto de caracteres", "Aten‡Æo")

          e.Cancel = True

          Exit Sub

       End If

    End Sub

     

     

     

    Esse evento ocorre antes do foco sair do controle. Caso o dado inserido esteja errado, vc cancela o usuário de sair deste controle (e.cancel = true).


     

    Espero ter ajudado.

    t+



    Valeu, resolveu por partes, mas como é um cadastro de celular para lojas, eles irão passar várias vezes o mesmo código de celular, teria como resolver isso? no meu código original, estava usando o inputbox
    quinta-feira, 18 de dezembro de 2008 19:17
  • Olá.

    Não entendi muito bem.

     

    A pessoa vai digitar alguma coisa nesse textbox, aí vai dar a mensagem que está inválido. O que exatamente isso se relaciona com que eles irão passar varias vezes o mesmo código de celular?

     

    Fico no aguardo.

    t+

     

    quinta-feira, 18 de dezembro de 2008 19:23
  • É assim, o Código do Celular é do cadastro em BD, esse vai ser o mesmo para, por exemplo, 5 cadastros, o que irá diferenciar vai ser o HEXADECIMAL, esse é unico para cada celular, como se fosse o CPF.
    É esse HEXADECIMAL que vou ter que ficar pedindo, de acordo com a quantidade que o usuário informar.

    Vou tentar exemplificar:

    Existem vários Fábio por aí, o que diferencia eles, é o número do CPF de cada um. Vamos supor que quero criar um programa onde irei cadastrar uma certa quantidade (irei informar qntos quero cadastrar), portanto o Nome vai ser Fábio para todos os 5 cadastros, apenas pedindo o CPF de cada um que vai sendo cadastrado (num Loop).
    quinta-feira, 18 de dezembro de 2008 19:36
  • Deixa mudar minha pergunta, como chamo esse procedimento Validating do textbox? Assim eu referencio ele antes de "jogar" pro parametro o conteudo do textbox.
    quinta-feira, 18 de dezembro de 2008 19:50
  • Consegui! Segue o trecho que alterei.


                    'Verifica se o campo hexadecimal está em branco ou menor que 15 caracteres

                    If edtHexa.Text.Length <> 15 Then
                        While edtHexa.Text = String.Empty
                            Dim Hexa As String = InputBox("Hexadecimal (Núm.: " & CStr(i) + 1 & "): ", "Digite o Hexadecimal")
                            While (VerificaHexaCadastrado(Hexa) = True) Or (Hexa.Length <> 15)
                                Hexa = InputBox("Hexadecimal inválido." & vbCrLf & vbCrLf & vbCrLf & "(Núm.: " & CStr(i) + 1 & ") :", "Digite o Hexadecimal")
                            End While
                            edtHexa.Text = Hexa
                        End While
                    End If
    sexta-feira, 19 de dezembro de 2008 12:05