Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 459117
            [titulo] => Login com Perfil de Acesso
            [dataCadastro] => DateTime Object
                (
                    [date] => 2013-10-22 09:50:20
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 232232
            [status] => A
            [isExample] => 
            [NomeUsuario] => Joel Rodrigues
            [Apelido] => 
            [Foto] => 232232_20161017163010.jpg
            [Conteudo] => Só agora observei que dentro do while você faz a seguinte atribuição de valor:[code]perfil = NivelAcesso;[/code]
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: [code]NivelAcesso = perfil ;[/code]
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: [code]frmp.NivelAcesso = perfil;[/code] ) )

Login com Perfil de Acesso

Jair Souza
   - 07 out 2013

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.
#Código

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

Post mais votado

Joel Rodrigues
   - 22 out 2013

Só agora observei que dentro do while você faz a seguinte atribuição de valor:#Código

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: #Código
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: #Código
frmp.NivelAcesso = perfil;

1
|
0

Valter Furtado
   - 08 out 2013

Experimenta retirar cbxPerfil.Text != ""

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

0
|
0

Jair Souza
   - 08 out 2013

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.

0
|
0

Jair Souza
   - 14 out 2013

E aí pessoal...alguma dica ?

0
|
0

Jair Souza
   - 17 out 2013


Citação:
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 :

#Código

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 ?

#Código
private void FrmPrincipal_Load(object sender, EventArgs e)
        {
            if (FrmLogin.NivelAcesso == "2")
            {
                toolStripButton5.Enabled = false;
                perfilToolStripMenuItem.Enabled = false;
            }
        }

0
|
0

Joel Rodrigues
   - 17 out 2013

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();

0
|
0

Jair Souza
   - 17 out 2013

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 ?

0
|
0

Joel Rodrigues
   - 17 out 2013

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.

0
|
0

Jair Souza
   - 17 out 2013

Eu tentei assim, mas não funcionou.

#Código

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;

0
|
0

Joel Rodrigues
   - 17 out 2013

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.

0
|
0

Jair Souza
   - 17 out 2013

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

#Código

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;

0
|
0

Joel Rodrigues
   - 17 out 2013

Na verdade você continua fazendo a mesma coisa. Pesquise sobre como ler os valores de um DataReader, vai ser algo como:
#Código

string perfil = reader["Perfil"].ToString()
após efetuar a consulta.

0
|
0

Jair Souza
   - 18 out 2013

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 :

#Código

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 :

#Código
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(); "

0
|
0

Joel Rodrigues
   - 18 out 2013

Vamos às respostas:

Citação:
**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.

Citação:
***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.

0
|
0

Jair Souza
   - 19 out 2013

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

#Código

 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

#Código
private void FrmPrincipal_Load(object sender, EventArgs e)
        {
           if (NivelAcesso != "1")
            {
               BtnFuncionarios.Enabled = false;
               MenuCadPerfil.Enabled = false;
            }
        }

0
|
0

Joel Rodrigues
   - 20 out 2013

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

0
|
0

Jair Souza
   - 21 out 2013

Eu entendo que declarei "NivelAcesso" como string e que na tabela funcionario o "Perfil" é um numero, e que tenho no FrmPrincipal um if comparando "NivelAcesso != "Administrador"...estou fazendo comparações entre texto e número, troquei string por int ...já fiz todas as alterações que pude e nada, ...trancou na falta de conhecimento...

0
|
0

Jair Souza
   - 22 out 2013

Você está certo, mas no FrmPrincipal que tem este if, não teria que deixar sempre enabled os botões, pois no caso "vazio" não é diferente de "Administrador" ?
No entanto não deixa enabled nunca, independente se for Usuário ou Administrador.

#Código

private void FrmPrincipal_Load(object sender, EventArgs e)
        {
            if (NivelAcesso != "Administrador")
            {
               BtnFuncionarios.Enabled = false;
               BtnFuncionarios.BackColor = Color.Red;
               MenuCadPerfil.Enabled = false;
               MenuCadPerfil.ForeColor = Color.Red;
            }
        }

0
|
0

Joel Rodrigues
   - 22 out 2013

Se for diferente de Administrador, você está DESABILITANDO e não habilitando. Então, se não for Administrador, ficará desabilitado.
E como você definiu em tempo de design? Ou seja, no design está habilitado ou desabilitado?

0
|
0

Jair Souza
   - 22 out 2013

Correto, pois somente o Administrador terá acesso a essas opções.

Inicia Habilitado.

0
|
0

Joel Rodrigues
   - 22 out 2013

E o que está errado? Está ficando desabilitado sempre por que o NivelAcesso, como você mesmo já constatou, é um número e não uma palavra. Você teria de verificar pelo número.

0
|
0