Lo primero ,conectarnos a la base de datos.

Ya hemos creado la base y la hemos de  copiar a la carpeta datos de nuestro proyecto, esto lo puedes usar desde Nautilus o directamente en Gambas, vas a Datos->nuevo->otros y en el cuadro de diálogo que se abre vas a la pestaña existente, navegas hasta el directorio donde la tienes, la seleccionas y das aceptar. Esto es necesario, ya que al ejecutar el programa por primera vez te creará un directorio oculto en tu home y copiará ahi tu base datos, en caso de que no exista. Esto lo realiza el procedimiento Conectarbase() del módulo que vamos a crear a continuación.

En el árbol del proyecto vamos a Fuentes->nuevo->módulo y lo llamamos Modcon. Este es su código:

Private hconn As Connection
Public Sub ConectarBase() As Connection

If Not Exist(User.Home &/ “.stock/stock”)  ‘comprueba si existe el archivo
Try Mkdir User.Home &/ “.stock”           ‘si no es así crea el directorio en la carpeta home
Copy “stock” To User.Home &/ “.stock/stock”  ‘y copia allí la base de datos
Endif

hconn = New Connection                  ‘declara la conexión y sus propiedades
hconn.Host = User.Home &/ “.stock”
hconn.name = “stock”
hconn.type = “sqlite3”
Try hconn.Open()   ‘la abre, si puede
Return hconn
If Error Then
hconn = Null
Message.Error(“error al conectar con la base”) ‘si no muestra el error

Endif
End

Public Sub cerrarconexion() ‘cierra la conexión

If hconn = Null Then Return
hconn.Close()
hconn = Null

End

Ya hemos usado este mismo código en otros programas, igual los comentarios en rojo explican sus principales aspectos. A continuación vamos a Fmain y agregamos dos controles textbox (txtuser y txtpass) y un botón (btnlog). El aspecto debería ser más o menos el siguiente:

log

Este será el primer formulario que aparezca cuando arranquemos el sistema, y de acuerdo al tipo de usuario, nos permitirá acceder a diferentes partes del programa. Por tanto, lo primero que hay que hacer es abrir la conexión y recuperar los datos de los usuarios,y luego hacer las comprobaciones en este orden:

1-Si el nombre del usuario fue escrito , en caso contrario ponemos el foco en el txtuser con la instrucción Setfocus  (nombre_del_control.Setfocus)

2-Si el usuario existe, en cuyo caso comprobamos:

A-Si escribió la contraseña, en caso contrario ponemos el foco en el txtpass .

B- Si la contraseña es correcta, en caso contrario ponemos el foco en el txtpass .

Una vez  que usuario y contraseña son correctos, vemos el tipo de usuario para saber a que partes del programa darle acceso. A continuación les dejo el código comentado del procedimiento comprobar_usuario

Public Sub comprobar_usuario()
Dim hres As Result               ‘declaramos variables locales
Dim Clave As String
Dim Clave2 As String
Dim Clave3 As String
Dim Clave4 As String
Dim filtro As String
hconn = Modcon.ConectarBase()    ‘llamamos a la conexión
filtro = txtuser.text                 ‘asignamos a la variable filtro el valor de txtuser.text

hres = hconn.Exec(“Select *  from usuarios where nombre like ‘” & filtro & “‘ “)  ‘ejecutamos la consulta
If txtuser.text = “” Then                           ‘comprobamos que el campo nombre no este vacío
Message.Warning(“Ingrese su nombre”)
txtuser.SetFocus                                  ‘si está vacío ponemos el foco en el control
Else If hres.Available = False Then                ‘comprobamos si el usuario existe o no
Message(“No existe el usuario”)
Else

‘asignamos a las variables los valores recuperados desde la base de datos

Clave = hres[“id_usuario”]
Clave2 = hres[“tipo_usuario”]
Clave3 = hres[“nombre”]
Clave4 = hres[“password”]

If txtuser.text = Clave3 And txtpass.text = “” Then     ‘comprobamos que escriba la contraseña
Message.Info(“Ingrese su Contraseña “)
txtpass.SetFocus
Else If txtuser.text = Clave3 And txtpass.text <> Clave4 Then  ‘comprobamos si la contraseña no coincide
Message.Info(“Contraseña incorrecta”)
txtpass.SetFocus
Else If txtuser.text = Clave3 And txtpass.text = Clave4 Then    ‘comprobamos que la contraseña  coincida
If Clave2 = “Admin” Then                           ‘si el usuario es admin
Message.Info(“Bienvenido” ” ” & Clave3 & ” ” “al sistema de administración”)
Fadmin.show
Me.close
Else                                               ‘si el usuario es un usuario común
Message.Info(“Bienvenido” ” ” & Clave3 & ” ” ” al sistema “)
Fingreso.Show
Me.Close
Endif

Endif
Endif
End
******************************************************************************************

¿Por qué lo ponemos en un procedimiento y no directamente en el evento Click de btnlog? Para poder ejecutarlo con el enter o el return sin tener que usar el ratón, si nos resulta más cómodo.

Podemos llamarlo con

Public Sub btnlog_Click()
comprobar_usuario
End

o con

Public Sub Form_KeyPress()

If Key.code = Key.Return Or Key.code = Key.Enter Then
comprobar_usuario
Endif

End

Este último código debe ir al principio de FMain.class, si no no funcionará.

Private hconn As Connection

Public Sub Form_Open()
Me.center
End

Hasta el próximo post.

Anuncios
Esta entrada fue publicada en programación y etiquetada , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s