Login com Perfil de Acesso
07/10/2013
0
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; namespace SistemaBibliotecario { public partial class FrmLogin : Form { //responsavel pelo nivel de acesso public static string NivelAcesso; //responsavel por mostrar quem está conectado public static string usuarioConectado; //responsavel por mostrar a senha para o alerta. public static string senhaUsuario; public static string conexao; public FrmLogin() { InitializeComponent(); } private void FrmLogin_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'bDBiblioteca2DataSet.Perfil' table. You can move, or remove it, as needed. this.perfilTableAdapter.Fill(this.bDBiblioteca2DataSet.Perfil); // TODO: This line of code loads data into the 'bDBiblioteca2DataSet.Funcionario' table. You can move, or remove it, as needed. this.funcionarioTableAdapter.Fill(this.bDBiblioteca2DataSet.Funcionario); } } private void BtnEntrar_Click(object sender, EventArgs e) { try { if ((textBox1.Text != "") && (textBox2.Text != "") && (cbxPerfil.Text != "")) { //string de conexao OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb"); //Responsavel pelo Comando Sql. conexao foi criado no inicio da tela. "select” tem os detalhes para conexao, nome da tb e as colunas OleDbCommand comando = new OleDbCommand("Select * From Funcionario Where Nome = @Nome and " + "Senha = @Senha and Perfil=@Perfil", conexao); //Parametrizar os codigos comando.Parameters.Add("@Nome ", OleDbType.VarChar).Value = textBox1.Text; comando.Parameters.Add("@Senha", OleDbType.VarChar).Value = textBox2.Text; comando.Parameters.Add("@Perfil", OleDbType.VarChar).Value = cbxPerfil.Text; //Abre a conexão e coloca reader para poder ler os dados conexao.Open(); OleDbDataReader reader = null; //lê as linhas de uma base de dados reader = comando.ExecuteReader(); //Se tiver coisa pra lê faça: if (reader.Read()) { //Variavel usuarioConectado foi criada no inicio da tela e recebe campo usuariotextBox.Text usuarioConectado = textBox1.Text; //Variavel nivelAcesso foi criado no inicio da tela e recebe o campo nivelAcessoComboBox.Text NivelAcesso = cbxPerfil.Text; //Variavel nivelAcesso foi criado no inicio da tela e recebe o campo Senha do Usuario.Text senhaUsuario = textBox2.Text; //Declara a variavel que recebe o formulario FrmPrinciapal FrmPrincipal frmp = new FrmPrincipal(); frmp.Show(); this.Hide(); } else { MessageBox.Show("Usuário ou Senha Inválido !", "Acesso", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox1.Clear(); textBox2.Clear(); textBox1.Focus(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Jair Souza
Post mais votado
22/10/2013
perfil = NivelAcesso;
Sendo que NivelAcesso nem aparece no trecho de código, então provavelmente você a declarou como pública e ela está vazia. Assim, mesmo após preencher a variável "perfil" com o conteúdo da coluna que vem do banco, você passa para essa variável um valor em branco. O correto seria fazer o contrário:
NivelAcesso = perfil ;
mas na prática nem precisa, pois você pode utilizar a própria variável "perfil" para passar o valor para a propriedade do FrmPrincipal:
frmp.NivelAcesso = perfil;
Joel Rodrigues
Mais Posts
08/10/2013
Valter Furtado
Que tipo de campo é esse?? Um checkbox? tem texto nele?
08/10/2013
Jair Souza
17/10/2013
Jair Souza
Que tipo de campo é esse?? Um checkbox? tem texto nele?
Fiz algumas alterações, e o login está funcionando, identifica usuário, senha e se o perfil não estiver igual ao que foi cadastrado para este usuário não entra :
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; namespace SistemaBibliotecario { public partial class FrmLogin : Form { public static string NivelAcesso { get; set; } public static string usuarioConectado { get; set; } public static string senhaUsuario; public static string conexao; public FrmLogin() { InitializeComponent(); } private void FrmLogin_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'bDBiblioteca2DataSet.Perfil' table. You can move, or remove it, as needed. this.perfilTableAdapter.Fill(this.bDBiblioteca2DataSet.Perfil); // TODO: This line of code loads data into the 'bDBiblioteca2DataSet.Funcionario' table. You can move, or remove it, as needed. this.funcionarioTableAdapter.Fill(this.bDBiblioteca2DataSet.Funcionario); PerfilcomboBox1.SelectedIndex = -1; } private void BtnEntrar_Click(object sender, EventArgs e) { try { if ((textBox1.Text != "") && (textBox2.Text != "") && (PerfilcomboBox1.Text != "")) { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb"); OleDbCommand comando = new OleDbCommand("Select * From Funcionario Where Login = @Login And " + "Senha = @Senha And Perfil = @Perfil", conexao); comando.Parameters.Add("@Login ", OleDbType.VarChar).Value = textBox1.Text; comando.Parameters.Add("@Senha", OleDbType.VarChar).Value = textBox2.Text; comando.Parameters.Add("@Perfil", OleDbType.VarChar).Value = PerfilcomboBox1.Text; conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(); if (reader.Read()) { usuarioConectado = textBox1.Text; senhaUsuario = textBox2.Text; NivelAcesso = PerfilcomboBox1.Text; FrmPrincipal frmp = new FrmPrincipal(); frmp.Show(); this.Visible = false; } else { MessageBox.Show("Usuário ou Senha Inválido !", "Acesso", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox1.Clear(); textBox2.Clear(); textBox1.Focus(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void BtnCancelar_Click(object sender, EventArgs e) { Application.Exit(); } private void FrmLogin_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 13) { this.ProcessTabKey(true); e.Handled = true; } } } }
...até aí beleza, mas no form principal que coloquei o código abaixo, não faz a distinção de Nível de acesso, tipo ser for Usuário deixar enable alguns botões, independente de quem faça o login ele libera tudo...o que deve estar faltando ?
private void FrmPrincipal_Load(object sender, EventArgs e) { if (FrmLogin.NivelAcesso == "2") { toolStripButton5.Enabled = false; perfilToolStripMenuItem.Enabled = false; } }
17/10/2013
Joel Rodrigues
No FrmPrincipal:
public string NivelAcesso;
No FrmLogin, para exibir o form prnicipal:
FrmPrincipal frmp = new FrmPrincipal(); frmp.NivelAcesso = NivelAcesso; //que foi preenchido com o valor do ComboBox frmp.Show();
17/10/2013
Jair Souza
17/10/2013
Joel Rodrigues
17/10/2013
Jair Souza
OleDbCommand comando = new OleDbCommand("Select * From Funcionario Where Login = @Login And " + "Senha = @Senha And Perfil = @Perfil", conexao); comando.Parameters.Add("@Perfil", OleDbType.VarChar).Value = NivelAcesso;
17/10/2013
Joel Rodrigues
17/10/2013
Jair Souza
if ((textBox1.Text != "") && (textBox2.Text != "")) { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb"); OleDbCommand comando = new OleDbCommand("Select * From Funcionario Where Login = @Login And " + "Senha = @Senha And Perfil = @Perfil", conexao); comando.Parameters.Add("@Login ", OleDbType.VarChar).Value = textBox1.Text; comando.Parameters.Add("@Senha", OleDbType.VarChar).Value = textBox2.Text; comando.Parameters.Add("@Perfil", OleDbType.VarChar).Value = NivelAcesso; conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(); if (reader.Read()) { usuarioConectado = textBox1.Text; senhaUsuario = textBox2.Text; NivelAcesso = Perfil; }
Dá erro no código nesta duas linhas :
comando.Parameters.Add("@Perfil", OleDbType.VarChar).Value = NivelAcesso;
NivelAcesso = Perfil;
17/10/2013
Joel Rodrigues
string perfil = reader["Perfil"].ToString()
18/10/2013
Jair Souza
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; namespace SistemaBibliotecario { public partial class FrmLogin : Form { public static string NivelAcesso { get; set; } public static string usuarioConectado { get; set; } public static string senhaUsuario; public static string conexao; public FrmLogin() { InitializeComponent(); } private void FrmLogin_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'bDBiblioteca2DataSet.Perfil' table. You can move, or remove it, as needed. this.perfilTableAdapter.Fill(this.bDBiblioteca2DataSet.Perfil); // TODO: This line of code loads data into the 'bDBiblioteca2DataSet.Funcionario' table. You can move, or remove it, as needed. this.funcionarioTableAdapter.Fill(this.bDBiblioteca2DataSet.Funcionario); } private void BtnEntrar_Click(object sender, EventArgs e) { try { if ((textBox1.Text != "") && (textBox2.Text != "")) { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb"); OleDbCommand comando = new OleDbCommand("Select * From Funcionario Where Login = @Login And " + "Senha = @Senha And Perfil = @Perfil", conexao); comando.Parameters.Add("@Login ", OleDbType.VarChar).Value = textBox1.Text; comando.Parameters.Add("@Senha", OleDbType.VarChar).Value = textBox2.Text; conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(); string perfil = reader["Perfil"].ToString(); perfil = NivelAcesso; if (reader.Read()) { usuarioConectado = textBox1.Text; senhaUsuario = textBox2.Text; FrmPrincipal frmp = new FrmPrincipal(); frmp.Show(); this.Visible = false; } else { MessageBox.Show("Usuário ou Senha Inválido !", "Acesso", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox1.Clear(); textBox2.Clear(); textBox1.Focus(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
E o do form Pricipal assim :
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace SistemaBibliotecario { public partial class FrmPrincipal : Form { public FrmPrincipal() { InitializeComponent(); } private void FrmPrincipal_Load(object sender, EventArgs e) { if (FrmLogin.NivelAcesso != "1") // Diferente de 1, pois é o ID do Administrador. { toolStripButton5.Enabled = false; perfilToolStripMenuItem.Enabled = false; } }
**Eu entendo que deve faltar Um parâmetro para "Perfil" como tem para usuário e senha, tipo assim "comando.Parameters.Add("@Perfil", OleDbType.VarChar).Value = " mas Igual a que, se para perfil não tem textbox ?;
***E mais uma dúvida, devo fazer tambem esta sua orientação :
"O ideal aí é você criar uma variável pública no FrmPrincipal e preencher ela antes de exibí-lo. Por exemplo:
No FrmPrincipal:
#Código
public string NivelAcesso;
No FrmLogin, para exibir o form prnicipal:
#Código
FrmPrincipal frmp = new FrmPrincipal();
frmp.NivelAcesso = NivelAcesso; //que foi preenchido com o valor do ComboBox
frmp.Show(); "
18/10/2013
Joel Rodrigues
Aqui cabe uma pergunta: você precisa filtrar pelo perfil? Eu creio que o filtro seja feito apenas pelo login (e senha, no caso) e o perfil seja apenas lido. Ou seja, quando o usuário faz o login, você identifica o perfil dele.
Exatamente, deve fazer da forma como eu orientei, pois você pode passar valores para o FrmPrincipal e a partir daí ficar independente do FrmLogin.
19/10/2013
Jair Souza
private void BtnEntrar_Click(object sender, EventArgs e) { try { if ((textBox1.Text != "") && (textBox2.Text != "")) { OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb"); OleDbCommand comando = new OleDbCommand("Select Perfil From Funcionario Where Login = @Login And Senha = @Senha", conexao); comando.Parameters.Add("@Login ", OleDbType.VarChar).Value = textBox1.Text; comando.Parameters.Add("@Senha", OleDbType.VarChar).Value = textBox2.Text; conexao.Open(); OleDbDataReader reader = null; reader = comando.ExecuteReader(CommandBehavior.CloseConnection); if (reader.HasRows) while(reader.Read()) { string perfil = reader["Perfil"].ToString(); perfil = NivelAcesso; usuarioConectado = textBox1.Text; senhaUsuario = textBox2.Text; FrmPrincipal frmp = new FrmPrincipal(); frmp.NivelAcesso = NivelAcesso; frmp.Show(); this.Hide(); } else { MessageBox.Show("Usuário ou Senha Inválido !", "Acesso", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox1.Clear(); textBox2.Clear(); textBox1.Focus(); } reader.Close(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
E no formPrincipal
private void FrmPrincipal_Load(object sender, EventArgs e) { if (NivelAcesso != "1") { BtnFuncionarios.Enabled = false; MenuCadPerfil.Enabled = false; } }
20/10/2013
Joel Rodrigues
Clique aqui para fazer login e interagir na Comunidade :)