Login com Perfil de Acesso

07/10/2013

0

Olá, montei este código para o form de login, mas não entra e dá mensagem do Else...seja qual for dos usuários que tente entrar.

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

Jair Souza

Responder

Post mais votado

22/10/2013

Só agora observei que dentro do while você faz a seguinte atribuição de valor:
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

Joel Rodrigues
Responder

Mais Posts

08/10/2013

Valter Furtado

Experimenta retirar cbxPerfil.Text != ""

Que tipo de campo é esse?? Um checkbox? tem texto nele?
Responder

08/10/2013

Jair Souza

Com esta alteração entrou, mas não faz a verificação do perfil, para que se possa desabilitar alguns menus, botões...dependendo do usuário.
Responder

14/10/2013

Jair Souza

E aí pessoal...alguma dica ?
Responder

17/10/2013

Jair Souza

Experimenta retirar cbxPerfil.Text != ""

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;
            }
        }
Responder

17/10/2013

Joel Rodrigues

O ideal aí é você criar uma variável pública no FrmPrincipal e preencher ela antes de exibí-lo. Por exemplo:
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();
Responder

17/10/2013

Jair Souza

Baseando-se nesse código que já tenho, como eu poderia colocar o valor do perfil diretamente na variavel e assim eliminar este combobox, para que se digite somente login e senha, mas seja feito a verificação de perfil ?
Responder

17/10/2013

Joel Rodrigues

Provavelmente o perfil está contido na tabela de usuários. Então, da mesma forma com que você recupera o login e senha, é só acessar o campo que contém o perfil e atribuir diretamente a uma variável.
Responder

17/10/2013

Jair Souza

Eu tentei assim, mas não funcionou.

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;
Responder

17/10/2013

Joel Rodrigues

Aí você está filtrando pelo perfil e não lendo o valor dele. Você precisa ler o valor da coluna após fazer o select.
Responder

17/10/2013

Jair Souza

Ajustei assim e ainda não, acho que fundiu os neurônios...

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;
Responder

17/10/2013

Joel Rodrigues

Na verdade você continua fazendo a mesma coisa. Pesquise sobre como ler os valores de um DataReader, vai ser algo como:
string perfil = reader["Perfil"].ToString()
após efetuar a consulta.
Responder

18/10/2013

Jair Souza

Bom dia, fiz as alterações, mas agora dá o seguinte erro quando tento autenticar o usuário "Nenhum valor foi fornecido para um ou mais parâmetros necessários." o código do form Login está 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;
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(); "

Responder

18/10/2013

Joel Rodrigues

Vamos às respostas:

**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 ?;


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.

***E mais uma dúvida, devo fazer tambem esta sua orientação :

Exatamente, deve fazer da forma como eu orientei, pois você pode passar valores para o FrmPrincipal e a partir daí ficar independente do FrmLogin.
Responder

19/10/2013

Jair Souza

Fiz estes ultimos ajustes, mas não deixa enabled as opções determinadas no form pirncipal , o que será que falta ?

 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;
            }
        }
Responder

20/10/2013

Joel Rodrigues

Verifique se o valor da propriedade NivelAcesso está sendo passado corretamente.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar