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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar