Jump to content
nelgaio

VB2010+Access2007

Recommended Posts

nelgaio

Boas ;)

Fiz isto e funciona muito bem.

Imports System.Data.OleDb
Public Class Login
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ole As String = "SELECT count(*) From login where utilizador = ? and password = ?;"
        Dim myConnectionString As String = _
        "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\pap.accdb"
        Dim connection As New OleDbConnection(myConnectionString)
        Dim command As New OleDbCommand(ole, connection)
        command.Parameters.Add("@utilizador", OleDbType.VarChar).Value = txtUtilizador.Text
        command.Parameters.Add("@password", OleDbType.VarChar).Value = txtPassword.Text
        connection.Open()
        Dim x As Object
        x = command.ExecuteScalar
        If Integer.Parse(x.ToString) = 1 Then
            MsgBox("Login efectuado com sucesso!", MsgBoxStyle.Information, "Login")
            Me.Hide()
            Form1.Show()
        Else
            MsgBox("Login mal sucedido", MsgBoxStyle.Information, "Login")
        End If
        connection.Close()
        connection = Nothing
        command = Nothing
    End Sub
End Class

Mas agora queria que tivesse dois logins diferentes, o utilizador normal e admin. Para depois ter buttons e forms que só admin pode aceder. Na tabela tenho uma coluna tipo_utilizador, se for =1 é utilizador normal e se for =2 é admin. Alguém sabem como fazer? :)

Agradeço ajudas!

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Podes fazer assim parecido

Imports System.Data.OleDb
Public Class Login
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ole As String = "SELECT count(*) From login where utilizador = ? and password = ?;"
        Dim myConnectionString As String = _
        "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\pap.accdb"
        Dim connection As New OleDbConnection(myConnectionString)
        Dim command As New OleDbCommand(ole, connection)
        command.Parameters.Add("@utilizador", OleDbType.VarChar).Value = txtUtilizador.Text
        command.Parameters.Add("@password", OleDbType.VarChar).Value = txtPassword.Text
        connection.Open()
        Dim x As Object

dim leitor as oledbdatareader = command.executereader()

        x = command.ExecuteScalar
        If Integer.Parse(x.ToString) = 1 Then

            MsgBox("Login efectuado com sucesso!", MsgBoxStyle.Information, "Login")
if leitor.hasrows then

if leitor.item("tipo_utilizador").tostring = "1" then
  MsgBox("O seu estatuto é de utilizador normal!", MsgBoxStyle.Information, "Login")
elseif leitor.item("tipo_utilizador").tostring = "2" then
  MsgBox("O seu estatuto é de Admin!", MsgBoxStyle.Information, "Login")
end if

end if
            Me.Hide()
            Form1.Show()
        Else
            MsgBox("Login mal sucedido", MsgBoxStyle.Information, "Login")
        End If
        connection.Close()
        connection = Nothing
        command = Nothing
    End Sub
End Class


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
nelgaio

E como mantenho o utilizador logado quando mudo de form? Ele simplesmente continua logado ou preciso de algum código para que ele continue?  :)

Share this post


Link to post
Share on other sites
bioshock

Guardas numa variável o ID do utilizador que acabou de logar e sempre que precisares de efectuar operações ao nível da base de dados com o utilizar em questão, pegas nessa variável.

Share this post


Link to post
Share on other sites
nelgaio

Boas

Podes fazer assim parecido

Imports System.Data.OleDb
Public Class Login
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ole As String = "SELECT count(*) From login where utilizador = ? and password = ?;"
        Dim myConnectionString As String = _
        "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\pap.accdb"
        Dim connection As New OleDbConnection(myConnectionString)
        Dim command As New OleDbCommand(ole, connection)
        command.Parameters.Add("@utilizador", OleDbType.VarChar).Value = txtUtilizador.Text
        command.Parameters.Add("@password", OleDbType.VarChar).Value = txtPassword.Text
        connection.Open()
        Dim x As Object

dim leitor as oledbdatareader = command.executereader()

        x = command.ExecuteScalar
        If Integer.Parse(x.ToString) = 1 Then

            MsgBox("Login efectuado com sucesso!", MsgBoxStyle.Information, "Login")
if leitor.hasrows then

if leitor.item("tipo_utilizador").tostring = "1" then
  MsgBox("O seu estatuto é de utilizador normal!", MsgBoxStyle.Information, "Login")
elseif leitor.item("tipo_utilizador").tostring = "2" then
  MsgBox("O seu estatuto é de Admin!", MsgBoxStyle.Information, "Login")
end if

end if
            Me.Hide()
            Form1.Show()
        Else
            MsgBox("Login mal sucedido", MsgBoxStyle.Information, "Login")
        End If
        connection.Close()
        connection = Nothing
        command = Nothing
    End Sub
End Class

Quando carrego no botão para fazer login dá um erro :S

Share this post


Link to post
Share on other sites
Andrepereira9

Boas

Assim já funciona  :)

Dim ole As String = "SELECT * From login where utilizador = ? and password = ?;"
Dim myConnectionString As String = _
        "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\pap.accdb"
Dim connection As New OleDbConnection(myConnectionString)
Dim command As New OleDbCommand(ole, connection)
command.Parameters.Add("@utilizador", OleDbType.VarChar).Value = TextBox1.Text
command.Parameters.Add("@password", OleDbType.VarChar).Value = TextBox2.Text
connection.Open()
Dim x As Integer = command.ExecuteScalar

     If Integer.Parse(x.ToString) >= 1 Then
          Dim leitor As OleDbDataReader = command.ExecuteReader()
               If leitor.HasRows Then
                    While leitor.Read
                         If leitor.Item("tipo_utilizador").ToString = "1" Then
                              MsgBox("Login efectuado com sucesso! O Seu Estatuto é de Utilizador Normal!", MsgBoxStyle.Information, "Login")
                         ElseIf leitor.Item("tipo_utilizador").ToString = "2" Then
                              MsgBox("Login efectuado com sucesso! O Seu Estatuto é de Administrador!", MsgBoxStyle.Information, "Login")
                         End If
                    End While
               End If
     Else
          MsgBox("Login mal sucedido", MsgBoxStyle.Information, "Login")
     End If
connection.Close()
connection = Nothing
command = Nothing

A sintaxe não pode ser 'Count(*),' pois o count, porque o numero de registos coincidentes com os valores apresentados. Resulta para o login, mas para ler o estatuto, não serve. Temos de seleccionar os dados

Tinha posto o

Dim leitor As OleDbDataReader = command.ExecuteReader()

antes do 

Dim x As Integer = command.ExecuteScalar

. Dava logo buraco

E faltava ainda o 'while leitor.read'. Ou seja, não estava a ler os dados da variavel leitor. Ia dar erro, quando tentasse ver que tipo de utilizador era

Código feito à pressa e sem testar  😳  Dá nisto  :D :D


A informática chegou para resolver problemas que antes não existiam

Quem ri por último é porque está conectado a 52 Kbs.

Share this post


Link to post
Share on other sites
bioshock

Muito dificil em código?  :)

Não. Quando fazes executas a seguinte linha de código:

Dim x As Integer = command.ExecuteScalar

Automaticamente apanhas o ID do utilizar logado. Mas, atenção: a tua query tem de ser alterada.

Tens de apanhar o ID do rapazolas que faz login.

"SELECT ID From login where utilizador = ? and password = ?;"

Feito isto, crias um module e gravas lá, numa variável, o ID do indivíduo.

Share this post


Link to post
Share on other sites
nelgaio

Não. Quando fazes executas a seguinte linha de código:

Dim x As Integer = command.ExecuteScalar

Automaticamente apanhas o ID do utilizar logado. Mas, atenção: a tua query tem de ser alterada.

Tens de apanhar o ID do rapazolas que faz login.

"SELECT ID From login where utilizador = ? and password = ?;"

Feito isto, crias um module e gravas lá, numa variável, o ID do indivíduo.

O que tenho de alterar? Não estou a perceber :x Só criar um módulo não dá?

Share this post


Link to post
Share on other sites
nelgaio

Boas

Assim já funciona  :confused:

Dim ole As String = "SELECT * From login where utilizador = ? and password = ?;"
Dim myConnectionString As String = _
        "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\pap.accdb"
Dim connection As New OleDbConnection(myConnectionString)
Dim command As New OleDbCommand(ole, connection)
command.Parameters.Add("@utilizador", OleDbType.VarChar).Value = TextBox1.Text
command.Parameters.Add("@password", OleDbType.VarChar).Value = TextBox2.Text
connection.Open()
Dim x As Integer = command.ExecuteScalar

     If Integer.Parse(x.ToString) >= 1 Then
          Dim leitor As OleDbDataReader = command.ExecuteReader()
               If leitor.HasRows Then
                    While leitor.Read
                         If leitor.Item("tipo_utilizador").ToString = "1" Then
                              MsgBox("Login efectuado com sucesso! O Seu Estatuto é de Utilizador Normal!", MsgBoxStyle.Information, "Login")
                         ElseIf leitor.Item("tipo_utilizador").ToString = "2" Then
                              MsgBox("Login efectuado com sucesso! O Seu Estatuto é de Administrador!", MsgBoxStyle.Information, "Login")
                         End If
                    End While
               End If
     Else
          MsgBox("Login mal sucedido", MsgBoxStyle.Information, "Login")
     End If
connection.Close()
connection = Nothing
command = Nothing

A sintaxe não pode ser 'Count(*),' pois o count, porque o numero de registos coincidentes com os valores apresentados. Resulta para o login, mas para ler o estatuto, não serve. Temos de seleccionar os dados

Tinha posto o

Dim leitor As OleDbDataReader = command.ExecuteReader()

antes do 

Dim x As Integer = command.ExecuteScalar

. Dava logo buraco

E faltava ainda o 'while leitor.read'. Ou seja, não estava a ler os dados da variavel leitor. Ia dar erro, quando tentasse ver que tipo de utilizador era

Código feito à pressa e sem testar  😳  Dá nisto  :D :D

Obrigadão, ajudou muito :D

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.