GRAVAR DEPOIS DE VALIDAR [Ô]NOVAMENTE[Ô]

ADHEL 09/08/2013 10:45:10
#427316
Pessoal.
Estou novamente com dificuldade em fazer a gravação depois da validação.
O amigo F001E me explicou em um tópico anterior.
Só que aprontei mais uma das minhas e estraguei tudo(Alterei o código e não soube consertar).
A classe ValidarCampos tem uma função que se o campo estiver vazio ela indica qual o campo e pára por aí.
A ideia é quando os campos obrigatórios estão preenchidos a função é executada ,como não encontra nada ela prossegue e deixar fazer a gravação normalmente.
Só que não consigo (e olha que o amigo já me explicou) fazer isso.
Validar e depois gravar.
Segue a classe ValidarCampos

  Public Class ValidarCampos
Public Function Validar(ByVal Page As Control) As Boolean
Dim Retorno As Boolean = True
Try
For Each ctrl As Control In Page.Controls
If TypeOf ctrl Is TextBox Then
With CType(ctrl, TextBox)
If .Visible AndAlso .Text = String.Empty And .Tag = 1 Then
MessageBox.Show([Ô]CAMPO [Ô] & Mid(.Name.ToUpper, 4, 20) & [Ô] é OBRIGATÓRIO[Ô], [Ô]Empresa[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
.Focus()
Retorno = False
Validar = Retorno
Exit Function
End If
End With
ElseIf TypeOf ctrl Is ComboBox Then
With CType(ctrl, ComboBox)
If .Visible AndAlso .SelectedIndex < 0 And .Tag = 1 Then
MessageBox.Show([Ô]CAMPO [Ô] & Mid(.Name.ToUpper, 4, 20) & [Ô] é OBRIGATÓRIO[Ô], [Ô]Empresa[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
.Focus()
Retorno = False
Validar = Retorno
Exit Function
End If
End With
Else
If ctrl.Controls.Count > 0 Then
Validar(ctrl)
End If
End If
Next

Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
Validar = Retorno
End Function
End Class


No form já tentei assim, sem sucesso.

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

[ô] 1 TENTATIVA
[ô]If _validar.Validar(Me) = True Then
[ô] Exit Sub
[ô]Else
[ô] gravar()
[ô]End If


[ô] 2 TENTATIVA
[ô]If _validar.Validar(Me) = True Then
[ô] Exit Sub
[ô]End If
[ô]gravar()


[ô] 3 TENTATIVA
[ô]If _validar.Validar(Me) = False Then
[ô] Exit Sub
[ô]End If
[ô]gravar()



[ô] 4 TENTATIVA
[ô]If _validar.Validar(Me) = False Then
[ô] Exit Sub
[ô]Else
[ô] gravar()
[ô]End If

End Sub

até mais.
ASHKATCHUP 09/08/2013 11:01:59
#427318
Resposta escolhida
Colega, a classe Validar só verifica os Textbox que tiverem o número [Ô]1[Ô] na propriedade TAG.

Tem certeza que tu colocou isso?
ASHKATCHUP 09/08/2013 11:08:41
#427320
Para usar a classe de validação, o código pode ser o seguinte:


Dim v As New ValidarCampos
[ô]
If v.Validar(Me) Then
[ô]
[ô]Todos campos obrigatórios estão preenchidos
[ô]Salva os dados
Salvar()
[ô]
End If
ADHEL 09/08/2013 11:17:59
#427322
Citação:

:
Colega, a classe Validar só verifica os Textbox que tiverem o número [Ô]1[Ô] na propriedade TAG.

Tem certeza que tu colocou isso?


Sim,coloquei.
A ideia é usar essa classe para todos formulários de gravação.
Como cada gravação(Cliente,Funcionario,etc) tem seu campos obrigatórios ,só mudo a tag para 1 do(s) campo(s) que eu preciso.
Citação:

:
Para usar a classe de validação, o código pode ser o seguinte:


Dim v As New ValidarCampos
[ô]
If v.Validar(Me) Then
[ô]
[ô]Todos campos obrigatórios estão preenchidos
[ô]Salva os dados
Salvar()
[ô]
End If


Não deu certo.
Não teria que ter um true ou false nessa linha.
If v.Validar(Me) Then
até mais e obrigado
ASHKATCHUP 09/08/2013 11:25:05
#427323
O Teste [Ô]= TRUE[Ô] é opcional, pois a função já retorna um valor boolean. Uma instrução [Ô]IF[Ô] será, no fim das contas, convertida num resultado booleano (true/false). Então, [Ô]TRUE=TRUE[Ô] ou [Ô]TRUE[Ô] serão analisados da mesma maneira.

O que está acontecendo no teu projeto? Da um erro? Não mostra o MessageBox? Explica melhor o que ta acontecendo ou posta o projeto aqui.

ADHEL 09/08/2013 14:16:59
#427339
Citação:

:
O que está acontecendo no teu projeto? Da um erro? Não mostra o MessageBox? Explica melhor o que ta acontecendo ou posta o projeto aqui.


Dim v As New ValidarCampos
If v.Validar(Me) Then
gravar()
End If
OU
If v.Validar(Me) = False Then
Exit Sub
Else
gravar()
End If
OU
If v.Validar(Me) Then
gravar()
Else
Exit Sub
End If

Desses modos avisa que o campo está em branco, logo em seguida quando fecho a messagebox grava os dados.
Preciso que o aviso apareça e não grave , até os campos obrigatórios, estiverem preenchidos.
A questão é que independente de ser true ou false ele continua a execução como sempre fosse true.

ASHKATCHUP 09/08/2013 14:31:25
#427342
Cara, o código abaixo deveria funcionar perfeitamente. Tem certeza que tu nao chama a função [Ô]gravar[Ô] em outra parte do codigo?

Posta o codigo inteiro da SUB ou do evento do botão pra eu olhar


If v.Validar(Me) Then
gravar()
Else
Exit Sub
End If

ADHEL 09/08/2013 14:40:27
#427344
na classe funcionarios
    Public Sub gravar()
Try
c.conOpen()
Dim sql As String = [Ô]insert into funcionarios(cpf,nome,cidade,telefone,celular,cargo,salario,admissao)values(@cpf,@nome,@cidade,@telefone,@celular,@cargo,@salario,@admissao)[Ô]
c.cmd = New MySqlCommand(sql, c.cnn)
With c.cmd
.Parameters.AddWithValue([Ô]@cpf[Ô], _cpf)
.Parameters.AddWithValue([Ô]@nome[Ô], _nome)
.Parameters.AddWithValue([Ô]@cidade[Ô], _cidade)
.Parameters.AddWithValue([Ô]@telefone[Ô], _telefone)
.Parameters.AddWithValue([Ô]@celular[Ô], _celular)
.Parameters.AddWithValue([Ô]@cargo[Ô], _cargo)
.Parameters.AddWithValue([Ô]@salario[Ô], _salario)
.Parameters.AddWithValue([Ô]@admissao[Ô], _admissao)
.ExecuteNonQuery()
End With
MessageBox.Show([Ô]Dados gravados[Ô], [Ô]Empresa[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show(ex.Message, [Ô]Empresa[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
Finally
c.conClose()
End Try
End Sub


E no Form
  Public Class Form1

Dim _func As New Funcionario
Dim _validar As New ValidarCampos
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If _validar.Validar(Me) Then
gravar()
Else
Exit Sub
End If
End Sub
Sub gravar()
With _func
.Admissao = DTPickerAdmissao.Value
.Cargo = txtCargo.Text
.Celular = txtCelular.Text
.Cidade = txtCidade.Text
.Cpf = txtCpf.Text
.Nome = txtNome.Text
.Salario = txtSalario.Text
.Telefone = txtTelefone.Text
.gravar()
End With
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dgv.DataSource = _func.carregarLista().OrderBy(Function(x) x.Nome).ToList
End Sub
End Class
ASHKATCHUP 09/08/2013 16:36:48
#427350
Cara, que estranho... o codigo deveria funcionar perfeitamente. Tu conferiu que os textbox possuem [Ô]1[Ô], sem aspas, na propriedade TAG?

Coloca um breakpoint na classe de validação e vai conferindo o resultado linha-a-linha. Tem algo de errado acontecendo
NILSONTRES 09/08/2013 16:48:55
#427352
Então, não adianta vc pegar exemplos dos amigos, e tentar implantar, vc precisa entender o conceito, por isso que vc esta apanhando, no outro topico, em poucas linhas te mostrei esses conceitos, vai por min.

Abraço
ADHEL 09/08/2013 17:08:40
#427354
Nilson
Fiz como você disse.
   Private Function Valida() As Boolean
If txtCpf.Text = [Ô][Ô] Then
MsgBox([Ô]campo cpf obrigatorio[Ô])
Return False
ElseIf txtNome.Text = [Ô][Ô] Then
MsgBox([Ô]campo nome obrigatorio[Ô])
Return False
ElseIf txtSalario.Text = [Ô][Ô] Then
MsgBox([Ô]campo salario obrigatorio[Ô])
Return False
End If
Return True
End Function
End Class


Funcionou perfeitamente.
Coloquei a função no próprio formulário.
E no botão ficou assim.
     If Valida() = True Then
gravar()
End If


O que não entendi é como colocar isso numa classe e utilizar em qualquer formulário.
Você poderia me ajudar?
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas