1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

VB.NET | Validar Campo

Discussão em 'Programação' iniciada por diog0silva, 28 de Maio de 2009. (Respostas: 7; Visualizações: 5390)

  1. diog0silva

    diog0silva Power Member

    Boas. Já estou a entrar em parafuso como uma coisa aqui na minha aplicação.

    Imaginemos que tenho um formulário para inserção e consulta de clientes. Tenho uma caixa de texto com o BI do cliente. Ao inserir um número de BI, ele verifica se já existe na base de dados algum cliente com aquele BI (através de uma função que criei, que retorna True se existir algum registo, e False se não existir nenhum). Este código está associado ao evento Validated da caixa de texto BI. Se o BI já existir na BD, aparece uma label à frente da caixa de texto a dizer "BI já existente".

    Depois, ao clicar no botão Gravar, antes do código para gravar o registo, verifico novamente se o BI já existe na BD (isto porque é uma aplicação para ser usada por mais q uma pessoa). Então, chamo outra vez a função para verificar se o BI já existe. Se retornar True aparece uma msgbox e não grava. Caso contrário, grava o registo.

    Corre tudo bem, o registo é adicionado. O problema é que, a seguir a adicionar o registo, a label do erro fica visivel, e aparece a mensagem "BI já existente". Já procurei no código todo, e a única linha de código onde essa label fica visivel é no evento Validated da textbox BI.

    Ou seja, ele tá a validar o campo BI ao carregar no botão Gravar? É a unica explicação que encontro para a label ficar vísivel. O que é que estou a fazer mal?
     
  2. jpaulino

    jpaulino Power Member

    E que tal mostrares código ?
     
  3. diog0silva

    diog0silva Power Member

    Função para verificar se já existe BI:
    Código:
    [COLOR=white]Public VerificarSeExisteCliente() As Boolean[/COLOR]
     
    [COLOR=white][SIZE=2][SIZE=2]Dim[/SIZE][/SIZE][SIZE=2] db [/SIZE][SIZE=2][SIZE=2]As [/SIZE][/SIZE][SIZE=2][SIZE=2]New[/SIZE][/SIZE][/COLOR][SIZE=2][COLOR=white] SqlConnection(ConString)[/COLOR][/SIZE]
    [SIZE=2][COLOR=white]db.Open()[/COLOR][/SIZE]
     
    [COLOR=white][SIZE=2][SIZE=2]Dim[/SIZE][/SIZE][SIZE=2] varsql [/SIZE][SIZE=2][SIZE=2]As [/SIZE][/SIZE][SIZE=2][SIZE=2]String[/SIZE][/SIZE][/COLOR]
    [SIZE=2][COLOR=white]varsql = [/COLOR][/SIZE][SIZE=2][SIZE=2][COLOR=white]"SELECT * FROM tab_cliente WHERE clt_bi = @bi"[/COLOR][/SIZE][/SIZE]
     
    [COLOR=white][SIZE=2][SIZE=2]Dim[/SIZE][/SIZE][SIZE=2] cmd [/SIZE][SIZE=2][SIZE=2]As [/SIZE][/SIZE][SIZE=2][SIZE=2]New[/SIZE][/SIZE][/COLOR][SIZE=2][COLOR=white] SqlCommand(varsql, db)[/COLOR][/SIZE]
    [SIZE=2][COLOR=white]cmd.Parameters.Add([/COLOR][/SIZE][COLOR=white][SIZE=2][SIZE=2]"@bi"[/SIZE][/SIZE][SIZE=2], SqlDbType.VarChar).Value = txtBI.Text[/SIZE][/COLOR]
     
    [COLOR=white][SIZE=2][SIZE=2]Dim[/SIZE][/SIZE][SIZE=2] reader [/SIZE][SIZE=2][SIZE=2]As[/SIZE][/SIZE][/COLOR][SIZE=2][COLOR=white] SqlDataReader[/COLOR][/SIZE]
    [SIZE=2][COLOR=white]reader = cmd.ExecuteReader[/COLOR][/SIZE]
     
    [COLOR=white][SIZE=2][SIZE=2]If[/SIZE][/SIZE][SIZE=2] reader.HasRows [/SIZE][SIZE=2][SIZE=2]Then[/SIZE][/SIZE][/COLOR]
    [COLOR=white][SIZE=2][SIZE=2]Return [/SIZE][/SIZE][SIZE=2][SIZE=2]True[/SIZE][/SIZE][/COLOR]
    [SIZE=2][SIZE=2][COLOR=white]Else[/COLOR][/SIZE]
    [/SIZE][COLOR=white][SIZE=2][SIZE=2]Return [/SIZE][/SIZE][SIZE=2][SIZE=2]False[/SIZE][/SIZE][/COLOR]
    [COLOR=white][SIZE=2][SIZE=2]End [/SIZE][/SIZE][SIZE=2][SIZE=2]If[/SIZE][/SIZE][/COLOR]
     
    [SIZE=2]db.Close()[/SIZE]
    
    Código associado ao evento Validated da textbox txtBI
    Código:
    [SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff][COLOR=white]If[/COLOR][/COLOR][/SIZE][/COLOR][/SIZE][COLOR=white][SIZE=2] VerificarSeExisteAtleta() = [/SIZE][SIZE=2][SIZE=2]True [/SIZE][/SIZE][SIZE=2][SIZE=2]Then[/SIZE][/SIZE][/COLOR]
    [SIZE=2]txtBIerro.Text = [SIZE=2][SIZE=2][COLOR=white]"BI já existente"[/COLOR][/SIZE][/SIZE]
    [COLOR=white]txtBIerro.Visible = [SIZE=2][SIZE=2][COLOR=white]True[/COLOR][/SIZE][/SIZE][/COLOR]
    [COLOR=white]txtBI.Focus()[/COLOR][/SIZE]
    [SIZE=2][SIZE=2][COLOR=white]Else[/COLOR][/SIZE][/SIZE]
    [SIZE=2][COLOR=white]txtBIerro.Visible = [/COLOR][/SIZE][SIZE=2][SIZE=2][COLOR=white]False[/COLOR][/SIZE]
    [/SIZE][COLOR=white][SIZE=2][SIZE=2]End [/SIZE][/SIZE][SIZE=2][SIZE=2]If[/SIZE][/SIZE][/COLOR]
    
    Código associado ao botão Gravar
    Código:
    If VerificarSeExiste Cliente() = True Then
    MsgBox("Já existe cliente!")
    Else
    Dim db As New SqlConnection(ConString)
    db.Open()
     
    Dim varsql As String = "INSERT INTO tab_cliente VALUES (@bi, @nome, .....)
    Dim cmd As New SqlCommand (varsql, db)
    [SIZE=2]cmd.Parameters.Add[COLOR=white]([/COLOR][/SIZE][SIZE=2][SIZE=2][COLOR=white]"@bi"[/COLOR][/SIZE][/SIZE][SIZE=2][COLOR=white],[/COLOR] SqlDbType.Int).Value = txtBI.Text[/SIZE]
    [SIZE=2][SIZE=2]cmd.Parameters.[COLOR=white]Add([/COLOR][/SIZE][SIZE=2][SIZE=2][COLOR=white]"@nome"[/COLOR][/SIZE][/SIZE][SIZE=2][COLOR=white],[/COLOR] SqlDbType.VarChar).Value = txtNome.Text.Trim[/SIZE]
    [SIZE=2]...[/SIZE]
     
    [SIZE=2]cmd.ExecuteNonQuery()[/SIZE]
    [SIZE=2]db.Close()[/SIZE]
     
    [SIZE=2]lblErro.Visible = False[/SIZE]
    [SIZE=2]ActualizarDados()[/SIZE]
    [/SIZE]



    Método ActualizarDados:
    Código:
     
    Dim db As New SqlConnection(ConString)
    db.Open()
     
    Dim varsql As String = "SELECT * FROM tab_cliente"
    Dim cmd As New SqlCommand (varsql, db)
    Dim SqlApd As New SqlDataAdapter(cmd)
    Dim dt As New DataTable
    SqlAdp.Fill(dt)
     
    [COLOR=white]txtBI.Text = [SIZE=2]dt.Rows(0).Item([/SIZE][SIZE=2][SIZE=2]"clt_bi"[/SIZE][/SIZE][SIZE=2])[/SIZE][/COLOR]
    [COLOR=white][SIZE=2]txtNome.Text = [SIZE=2]dt.Rows(0).Item([/SIZE][SIZE=2][SIZE=2]"clt_nome"[/SIZE][/SIZE][SIZE=2])[/SIZE][/SIZE][/COLOR]
    [COLOR=white][SIZE=2]....[/SIZE][/COLOR]
     
    [COLOR=white][SIZE=2]db.Close()[/SIZE][/COLOR]
    
     
    Última edição: 28 de Maio de 2009
  4. diog0silva

    diog0silva Power Member

    txtBI.Text = String.Empty

    Ao fazer isto, ele vai executar o código do evento Validated? É a única explicação que encontro.

    EDIT: Já consegui resolver.
     
    Última edição: 28 de Maio de 2009
  5. alfinete

    alfinete Power Member

    Código:
    
     public bool vtxts(string txt, System.Web.UI.WebControls.Label lbl)
                        {
                          bool res = false;
    
                          if (txt != "")
                          {
                            res = true;
                            lbl.Text = string.empty;
                          }
                          else
                            lbl.Text = "obrigatorio preencher";
    
                          return res;
                        }
    
    

    tens aqui um exemplo em c# de validação de um campo se vazio ou n ....

    é so para dar o exemplo ......

    aqui recebe uma string (valor da caixa de texto e uma label (nome da label que diz o erro))

    nota:

    no teu caso em vez de receberes uma string recebes um datatable , e a label

    Código:
     public bool vtxts(datatable dt , System.Web.UI.WebControls.Label lbl)
    
     {
    
    aqui verificas os rows.count da mesma e devolves o bool 
    e poes a mensagem de erro na respectiva label 
    }
    
    chamar da funcao       if(  txts(dt,nomadalabel))
                                    grava dados
    
    não precissas de validar as coisas duas vezes , chama so isso uma vez no botão gravar

    inicializa na aplicão a label sem texto

    agora é so converteres o code de c# para vb que é quase igual

    este metodo que te dei esta a chamar uma label em asp.net

    Código:
    System.Web.UI.WebControls.Label lbl
    
    tens de mudar o namespace para o teu caso caso seja windows forms

    que penso que seja este
    Código:
    [/URL][/COLOR][B][COLOR=Red][URL="http://msdn.microsoft.com/en-us/library/system.windows.forms.aspx"]System.Windows.Forms[/URL].label[/COLOR][/B]


    fazes em c#
    Código:
      private bool valida( datatable dt , System.Windows.Forms.Label lbl)



    espero que tenha ajudado
     
  6. esteve a ver o que precisas, e basta pores assim


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Label1.Text = Nothing
    End Sub
     
  7. Ace-_Ventura

    Ace-_Ventura Power Member

    Sabes que isto é 1 tópico de 2009 certo? :P
     
  8. TheLegion

    TheLegion Power Member

    Venha daí a imagem do king do desenterro.
     

Partilhar esta Página