ERRO FORM DE LOGIN

BRUNOGOMES 10/10/2012 00:43:47
#411677
Pessoal, estou fazendo um form para login.. tem o form principal que é o: frm_Login e esse abre os outros dois: frm_Usuario e frm_Admin
Possui o btn_ok q vai abrir um dos forms de usuario ou admin.. e o cmb_Login q possui as opcoes de Amin ou Usuario
Possui um modulo tbm que possui uma variavel:
Public formularioAtual As System.Windows.Forms.Form


O codigo do frm_Login:
Imports MySql.Data.MySqlClient

Public Class frm_Login
Dim verificaChaveSenhaComando, verificaChaveSenhaComando2 As New MySqlCommand
Dim conexao As New MySqlConnection
Dim Read As MySqlDataReader
Dim tentativas As Integer

Private Sub frm_Login_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cmb_Login.Items.Add([Ô]Admin[Ô])
cmb_Login.Items.Add([Ô]Usuário[Ô])
conexao.ConnectionString = [Ô]server=localhost;user Id=root;password=admin;database=workshopmanager[Ô]
verificaChaveSenhaComando = conexao.CreateCommand
verificaChaveSenhaComando2 = conexao.CreateCommand

verificaChaveSenhaComando.Connection = conexao
verificaChaveSenhaComando.CommandType = CommandType.Text
verificaChaveSenhaComando.CommandText = [Ô]SELECT * FROM admin WHERE login_Admin=@logA and senha_Admin=@senA[Ô]

verificaChaveSenhaComando2.Connection = conexao
verificaChaveSenhaComando2.CommandType = CommandType.Text
verificaChaveSenhaComando2.CommandText = [Ô]SELECT * FROM usuario WHERE login_Usuario=@logU and senha_Usuario=@senU[Ô]
End Sub

Private Sub btn_OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_OK.Click
If txt_Chave.Text.Trim = [Ô][Ô] Then
MessageBox.Show([Ô]Informe a sua Chave ![Ô], [Ô]Chave[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
txt_Chave.Focus()
Exit Sub
End If

If txt_Senha.Text.Trim = [Ô][Ô] Then
MessageBox.Show([Ô]Informe a sua senha ![Ô], [Ô]Senha[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
txt_Senha.Focus()
Exit Sub
End If

If cmb_Login.Text.Trim = [Ô][Ô] Then
MessageBox.Show([Ô]Selecione o modo de Login : Admin ou Usuário ![Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
cmb_Login.Focus()
Exit Sub
End If

If cmb_Login.SelectedIndex = 0 Then
verificaChaveSenhaComando.Parameters.Add([Ô]@logA[Ô], MySqlDbType.VarChar)
verificaChaveSenhaComando.Parameters([Ô]@logA[Ô]).Value = txt_Chave.Text
verificaChaveSenhaComando.Parameters.Add([Ô]@senA[Ô], MySqlDbType.VarChar)
verificaChaveSenhaComando.Parameters([Ô]@senA[Ô]).Value = txt_Senha.Text
conexao.Open()
Read = verificaChaveSenhaComando.ExecuteReader
verificaLogin()
conexao.Close()
End If

If cmb_Login.SelectedIndex = 1 Then
verificaChaveSenhaComando2.Parameters.Add([Ô]@logU[Ô], MySqlDbType.VarChar)
verificaChaveSenhaComando2.Parameters([Ô]@logU[Ô]).Value = txt_Chave.Text
verificaChaveSenhaComando2.Parameters.Add([Ô]@senU[Ô], MySqlDbType.VarChar)
verificaChaveSenhaComando2.Parameters([Ô]@senU[Ô]).Value = txt_Senha.Text
conexao.Open()

Read = verificaChaveSenhaComando2.ExecuteReader
verificaLogin()
conexao.Close()

End If
End Sub

Private Sub txt_Chave_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_Chave.KeyPress
If Char.IsNumber(e.KeyChar) Then
e.Handled = True
End If
End Sub

Private Sub txt_Senha_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_Senha.KeyPress
If Char.IsLetter(e.KeyChar) Then
e.Handled = True
End If
End Sub

Private Sub verificaLogin()

With Read
If .Read Then
MessageBox.Show([Ô]Acesso permitido ! Bem Vindo [Ô][Ô][Ô] & txt_Chave.Text & [Ô][Ô][Ô][Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
If cmb_Login.SelectedIndex = 0 Then
Me.Hide()
formularioAtual = New frm_Usuariovb()
formularioAtual.Show()
ElseIf cmb_Login.SelectedIndex = 1 Then
Me.Hide()
formularioAtual = New frm_Admin()
formularioAtual.Show()
End If
Else
tentativas += 1
If tentativas >= 3 Then
MessageBox.Show([Ô]Número de tentativas foi excedido ![Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End
Else
txt_Chave.Clear()
txt_Senha.Clear()
MessageBox.Show([Ô]Chave ou senha inválida ![Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End If
txt_Chave.Focus()
End With
End Sub

Private Sub btn_cancela_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cancela.Click
End
End Sub
End Class


Quando clico no botao OK, se os dados tiverem certo, ocorre tudo certo...
mas se o login e a senha tiverem erradas ou só a senha tiver errada, da esse erro:
[Ô]Parameter [ô]@logA[ô] has already been defined.[Ô]
mas deveria aparecer a msgbox informando q os dados estao errados...

Alguem pode me ajudar?

Tabelas banco Mysql:

Create table Admin (
cod_Admin integer unsigned primary key not null auto_increment,
login_Admin varchar(10) not null,
senha_Admin varchar(6) not null) ENGINE=INNODB;

Create table Usuario (
cod_Usuario integer unsigned primary key not null auto_increment,
login_Usuario varchar(10) not null,
senha_Usuario varchar(6) not null) ENGINE=INNODB;

BRUNOGOMES 10/10/2012 13:00:13
#411716
algueem ??
KERPLUNK 10/10/2012 13:37:22
#411718
Resposta escolhida
Isso acontece porque você está instanciando o objeto à nível de formulário:
Dim verificaChaveSenhaComando, verificaChaveSenhaComando2 As New MySqlCommand

Com isso, se você executa a primeira vez, vai dar certinho, a segundo vai dar esse erro. Para resolver o problema, faça essa declaração antes do seu bloco de valdação.
BRUNOGOMES 10/10/2012 13:47:39
#411721
nao entendi.. onde eh o bloco de validação que vc quer dizer ?
se eu coloco essas variaveis em otro lugar ela n vai visivel pra todos os objetos
KERPLUNK 10/10/2012 13:58:15
#411726
Isso é o seu bloco de validação:
Citação:

If cmb_Login.SelectedIndex = 0 Then
verificaChaveSenhaComando.Parameters.Add([Ô]@logA[Ô], MySqlDbType.VarChar)
verificaChaveSenhaComando.Parameters([Ô]@logA[Ô]).Value = txt_Chave.Text
verificaChaveSenhaComando.Parameters.Add([Ô]@senA[Ô], MySqlDbType.VarChar)
verificaChaveSenhaComando.Parameters([Ô]@senA[Ô]).Value = txt_Senha.Text
conexao.Open()
Read = verificaChaveSenhaComando.ExecuteReader
verificaLogin()
conexao.Close()
End If

If cmb_Login.SelectedIndex = 1 Then
verificaChaveSenhaComando2.Parameters.Add([Ô]@logU[Ô], MySqlDbType.VarChar)
verificaChaveSenhaComando2.Parameters([Ô]@logU[Ô]).Value = txt_Chave.Text
verificaChaveSenhaComando2.Parameters.Add([Ô]@senU[Ô], MySqlDbType.VarChar)
verificaChaveSenhaComando2.Parameters([Ô]@senU[Ô]).Value = txt_Senha.Text
conexao.Open()

Read = verificaChaveSenhaComando2.ExecuteReader
verificaLogin()
conexao.Close()

End If


Citação:

se eu coloco essas variaveis em otro lugar ela n vai visivel pra todos os objetos


é exatamente esta a idéia. é uma péssima idéia usar esse tipo de objeto reaproveitando para tudo...
BRUNOGOMES 10/10/2012 14:13:48
#411727
consegui resolver .. Valeu abraço. ;)

Imports MySql.Data.MySqlClient

Public Class frm_Login
Dim cmd, cmd2 As New MySqlCommand
Dim con As New MySqlConnection
Dim Read As MySqlDataReader
Dim tentativas As Integer

Private Sub btn_cancela_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cancela.Click
End
End Sub

Private Sub frm_Login_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cmb_Tipo.Items.Add([Ô]Administrador[Ô])
cmb_Tipo.Items.Add([Ô]Usuário[Ô])
con.ConnectionString = [Ô]server=localhost;user Id=root;password=admin;database=workshopmanager[Ô]
End Sub

Private Sub btn_OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_OK.Click
cmd = con.CreateCommand
cmd2 = con.CreateCommand

cmd.Connection = con
cmd.CommandType = CommandType.Text
cmd.CommandText = [Ô]SELECT * FROM admin WHERE login_Admin=@logA and senha_Admin=@senA[Ô]

cmd2.Connection = con
cmd2.CommandType = CommandType.Text
cmd2.CommandText = [Ô]SELECT * FROM usuario WHERE login_Usuario=@logU and senha_Usuario=@senU[Ô]

If txt_Login.Text.Trim = [Ô][Ô] Then
MessageBox.Show([Ô]Informe o seu Login ![Ô], [Ô]Chave[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
txt_Login.Focus()
Exit Sub
End If

If txt_Senha.Text.Trim = [Ô][Ô] Then
MessageBox.Show([Ô]Informe a sua senha ![Ô], [Ô]Senha[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
txt_Senha.Focus()
Exit Sub
End If

If cmb_Tipo.Text.Trim = [Ô][Ô] Then
MessageBox.Show([Ô]Selecione o tipo de Login : Administrador ou Usuário ![Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
cmb_Tipo.Focus()
Exit Sub
End If

If cmb_Tipo.SelectedIndex = 0 Then
cmd.Parameters.Add([Ô]@logA[Ô], MySqlDbType.VarChar)
cmd.Parameters([Ô]@logA[Ô]).Value = txt_Login.Text
cmd.Parameters.Add([Ô]@senA[Ô], MySqlDbType.VarChar)
cmd.Parameters([Ô]@senA[Ô]).Value = txt_Senha.Text

con.Open()
Read = cmd.ExecuteReader
verificaLogin()
con.Close()
End If

If cmb_Tipo.SelectedIndex = 1 Then
cmd2.Parameters.Add([Ô]@logU[Ô], MySqlDbType.VarChar)
cmd2.Parameters([Ô]@logU[Ô]).Value = txt_Login.Text
cmd2.Parameters.Add([Ô]@senU[Ô], MySqlDbType.VarChar)
cmd2.Parameters([Ô]@senU[Ô]).Value = txt_Senha.Text

con.Open()
Read = cmd2.ExecuteReader
verificaLogin()
con.Close()
End If
End Sub

Private Sub txt_Login_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_Login.KeyPress
If Char.IsNumber(e.KeyChar) Then
e.Handled = True
End If
End Sub

Private Sub txt_Senha_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_Senha.KeyPress
If Char.IsLetter(e.KeyChar) Then
e.Handled = True
End If
End Sub

Private Sub verificaLogin()
With Read
If .Read Then
MessageBox.Show([Ô]Acesso permitido ! Bem Vindo [Ô][Ô][Ô] & txt_Login.Text & [Ô][Ô][Ô][Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
If cmb_Tipo.SelectedIndex = 0 Then
Me.Hide()
formularioAtual = New frm_Admin()
formularioAtual.Show()
ElseIf cmb_Tipo.SelectedIndex = 1 Then
Me.Hide()
formularioAtual = New frm_Usuario()
formularioAtual.Show()
End If
Else
tentativas += 1
If tentativas >= 4 Then
MessageBox.Show([Ô]Número de tentativas foi excedido. Programa fechado![Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End
Else
txt_Login.Clear()
txt_Senha.Clear()
MessageBox.Show([Ô]Login ou senha inválida![Ô], [Ô]Login[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End If
txt_Login.Focus()
End With
End Sub
End Class

KERPLUNK 10/10/2012 14:17:51
#411728
Ótimo! Por favor feche o tópico.
Tópico encerrado , respostas não são mais permitidas