Condicional para elegir formulario con BD

Iniciado por mbc, 10 Agosto 2009, 02:52 AM

0 Miembros y 2 Visitantes están viendo este tema.

mbc

Estoy usando este pequeño script para el ingreso a un menu en dicho programa.
Set conn = New ADODB.Connection
   conn.ConnectionString = _
       "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=" & db_file & ";" & _
       "Persist Security Info=False"
   conn.Open

   ' Look up the user name/password.
   statement = "SELECT COUNT (*) FROM Users WHERE " & _
       "UserName='" & Replace(txtUserName.Text, "'", "''") & "' AND " & _
       "Password='" & Replace(txtPassword.Text, "'", "''") & "'"
   Set rs = conn.Execute(statement)

   ' See if we got anything.
   If CLng(rs.Fields(0)) < 1 Then
       ' There is no match.
       ' Do not allow the login.
       Unload Me
       MsgBox "Invalid user name/password."
   Else
       ' There is a match.
       ' Display the program's main form.
       Form1.Show
       Unload Me
   End If

   rs.Close
   conn.Close


El problema esta es en que me pidieron, tener varios niveles de acceso, usuario estandar y usuario admin.

En la base de datos agregue un campo llamado tipo, donde los valores son numerico, 1=admin y 2=estandar

Quiero saber como construir un condicional para que cuando el user sea admin cargue el form2 y cuando sea estandar el form3. Internamente debe verificar que tipo de numero hay en el campo Tipo.
Saludos
Mira a tu alrededor siempre estaremos, donde hay sistema de comunicacion hay podemos estar, asi que no corras.

cassiani

ok, hay varias formas, puedes por ejemplo usar este mismo bloque
' See if we got anything.
    If CLng(rs.Fields(0)) < 1 Then
        ' There is no match.
        ' Do not allow the login.
        Unload Me
        MsgBox "Invalid user name/password."
    Else
        'AQUI
    End If


y donde te señale, haces una nueva consulta a la base de datos y extraes el valor del campo, luego comparas y das el acceso dependiendo del caso, o puedes obtener el valor antes, en el query inicial y luego haces la comparación donde te especifique anteriormente.

saludos

mbc

Si sabia que era ahi, pero no se mucho de las consultas a base de datos...
Mira a tu alrededor siempre estaremos, donde hay sistema de comunicacion hay podemos estar, asi que no corras.

jack06

wenas mas abajo ya habian hablado de este incluso deje un pekeño ejemplo

http://www.megaupload.com/?d=9QSOU62Y

Salu2....
(̅_̅̅_̅(̅_̅_̅_̅_̅() ڪ €l $åßîø nø d nµn¢å tødø lø qµ£ Þî£n$å, Þ£®ø $î£mÞ®£ Þî£n$å tødø lø qµ£ d (̅_̅̅_̅(̅_̅_̅_̅_̅() ڪ

mbc

Cita de: jack06 en 10 Agosto 2009, 03:46 AM
wenas mas abajo ya habian hablado de este incluso deje un pekeño ejemplo

http://www.megaupload.com/?d=9QSOU62Y

Salu2....


Hola que tal gracias por tu programa.. ya lo estoy verificando... dejame ver si me funciona...
Mira a tu alrededor siempre estaremos, donde hay sistema de comunicacion hay podemos estar, asi que no corras.

mbc

Bueno he tratado de agarrar el valor de nivel.... pense que seria algo asi....
Citarstatement = "SELECT COUNT (*) FROM Users WHERE " & _
        "UserName='" & Replace(txtUserName.Text, "'", "''") & "' AND " & _
        "Password='" & Replace(txtPassword.Text, "'", "''") & "'"
    Set rs = conn.Execute(statement)
   VerN = rs.Fields("Nivel")
    ' See if we got anything.
    If CLng(rs.Fields(0)) < 1 Then
        ' There is no match.
        ' Do not allow the login.
        Unload Me
        MsgBox "Invalid user name/password."
    Else
        If VerN = 1 Then
        Form1.Show
        Unload Me
        Else
        Form2.Show
        Unload Me

        End If

lo que esta en rojo fue lo que trate de arreglar... pero creo que la para capturarlo tendría que ser desde la consulta en SQL
Mira a tu alrededor siempre estaremos, donde hay sistema de comunicacion hay podemos estar, asi que no corras.

Angeldj27

Creo que eso te quedaria mejor con el componente ado pero bueno, cuando haces la primera consulta le asignas a una variable el valor del campo nivel del user y pass que has combalidadop y despues haces una condicion y llamas uno o el otro form y listo  :P


"Que vamos a hacer Mañana?..... Lo mismo que hacemos todos los dias Pinky tratar de Conquistar el Mundoooo!!!!!

cassiani

prueba así

Código (vb) [Seleccionar]
Option Explicit

Public rst    As ADODB.Recordset
Public sSQL   As String
Public sConex As String

Private Sub Command1_Click()
    sSQL = "SELECT * FROM Users WHERE " & _
        "UserName='" & Replace(txtUserName.Text, "'", "''") & "' AND " & _
        "Password='" & Replace(txtPassword.Text, "'", "''") & "'"
   
    rst.Open sSQL, sConex, adOpenDynamic, adLockOptimistic
        If rst.EOF And rst.BOF Then
            MsgBox "Invalid user name/password."
        Else
            Select Case (rst!Nivel)
                Case 1:
                    Form1.Show
                Case 2:
                    Form2.Show
            End Select
        End If
    rst.Close
End Sub

Private Sub Form_Load()
    Set rst = New ADODB.Recordset
    sConex = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Replace(App.Path & "\db.mdb", "\\", "\")
End Sub


obviamente hay mejores formas de trabajar