sábado, 28 de abril de 2012

08 Formularios: Creando formularios (I)

Ahora vamos a crear los formularios de entrada (el tipico que pide el Usuario y su login), y el formulario de trabajo (donde podremos ver los contactos, editarlos, borrarlos, insertarlos, etc).


Para crear formularios nuevos, nos vamos al lado izquierdo, pulsamos el boton derecho en "Fuentes" -> "Nuevos" -> "formulario"

Y pondremos el nombre de "FormulariodeTrabajo"

Repetimos los mismos pasos para crear el formulario "FormularioAcceso"

Vamos a trabajar sobre este último.

Tenemos que poner dos etiquetas tipo "label" y dos tipo "Textbox", además de un botón para seguir adelante.
 El formulario os debe quedar asi:

Ahora vamos a modificar las propiedades "text" de las label1 y labe2 y del botón

Eso se hace seleccionando el componente que hemos puesto en el formulario (por ejemplo el label1) y a la derecha de la pantalla nos aparece sus propiedades, buscamos "text", y ponemos el texto de "Usuario:".


 Asi obtendremos el siguiente formulario:

Como veis en la captura, también hay una propiedad de los texbox, que nos interesa a la hora de ocultar lo que escribimos, para ello hay que pulsar en la propiedad "password" y ponerla como "True".


Ahora vamos a añadir controles al formulario "FormulariodeTrabajo" :

El primer control que vamos a usar es un contenedor, el "IconPanel", este control es un contenedor que puede contener a más controles y ademas nos muestra una lista de pestañas que podemos personalizar con texto e iconos.


 Lo añadimos al formulario.
Ahora en la propiedad "count" podemos indicar el nº de pestañas que tendrá, podremos 3.
Y en la propiedad "text", pondremos el nombre de la pestaña y su icono en la propiedad "Picture" (podemos aprovechar el stock de iconos para elegirlos).

Podeis obtener esto:


 A cada pestaña le iremos añadiendo diversos controles:
         - Textbox: para introducir datos
         - Label: para indicar etiquetas
         - Gridview: para presentar los datos
         - Botones: para hacer operaciones.

 Ademas, nos falta añadir el código a los formularios, ya que estos, aun no pueden hacer nada, esto será en las próximas entradas...


07. Clases: Añadiendo Métodos (I)

Ahora, vamos a añadir varios métodos a nuestras clases.

En particular voy a explicar, como añadir métodos a la clase Registro.

Para ello, vamos a necesitar varias variables privadas nuevas:


'----------------------------                                     
' Variables extras...
'----------------------------
Private conectar As Connection 'conecta a la base de datos
Private resultado As Result 'contiene los registros que se devuelven de una consulta
Private SQLString As String 'nos va ha servir para contener las ordenes en el lenguaje SQL

Estas se deben de introducir antes de la zona donde definimos los métodos Sub, dentro de la clase "Registro.class".

Ahora pasamos a los métodos:

Conectarse: es el que se encarga de conectarse a la base de datos, si hay algún problema devuelve un mensaje "Error abriendo la base de datos!!!".
Public Function conectarse()As Boolean                                                           

With conectar
    .type = "mysql"
    .host = "localhost" 'lugar donde esta la base de datos
    .login = "admin"
    .password = "admin"
    .name = "dblistin" 'nombre de la base de datos


Try .OPEN
If Error Then
     Message.Error("Error abriendo la base de datos!!!\n" & Error.Text)
Return False
Else
    Return True
Endif
End With


End

Insertar: se encarga de insertar un registro en la tabla "datoslistin"
Public Sub insertar()        
SQLString = "INSERT INTO datoslistin(nif,nombre,apellidos,telefono,movil,domicilio,
ruta_grafica,ruta_mini) Values ('"
SQLString &= hnombre
SQLString &= "','" & hapellidos
SQLString &= "','" & htelefono
SQLString &= "','" & hmovil
SQLString &= "','" & hdomicilio
SQLString &= "','" & hruta_grafica
SQLString &= "','" & hruta_mini & "')"
Try resultado  = conectar.Exec(SQLString)
If Error Then
Message.Error(" Se ha producido un ERROR al Intentar insertar datos, revise ID, " & "\nSentencia: " & sqlstring)
Endif
End

 
Ahora, vamos a añadir el método modificar_nif, el cual dado un nif concreto, va a modificar los datos del registro que coincida con ese nif.
Public Sub modificar_nif()                                                
SQLString = "UPDATE datoslistin SET "
SQLString &= "nombre='" & hnombre
SQLString &= "', apellido='" & hapellido
SQLString &= "', telefono='" & htelefono
SQLString &= "', movil='" & hmovil
SQLString &= "', domicilio='" & hdomicilio
SQLString &= "', ruta_grafica='" & hruta_grafica
SQLString &= "', ruta_mini='" & hruta_mini & "'"
SQlString &= " WHERE nif='" & hnif & "'"
Try resultado = conectar.Exec(SQLString)
If Error Then
Message.Error(" Se ha producido un ERROR al Modificar datos, revise ID , "
 & "\nSentencia: " & sqlstring)
Else
Return mRs
Endif
End

Y ahora, vamos a hacer una función que pasado una  consulta en sql, nos devuelva los campos que genera dicha consulta.
Public Function sql(consulta As String) As Result              
Try resultado = conectar.Exec(consulta)
If Error Then message.info("Consulta erronea, revisela")
Return resultado
End

Como tarea, podeis hacer lo mismo con la clase Usuario, añadirle los mismos métodos, eso si, los teneis que adaptar a los campos que tiene la tabla "login".


viernes, 27 de abril de 2012

06. Clases: Añadiendo Propiedades.

Vamos a añadir  varias propiedades a nuestras clases recien creadas.

Por cada campo que tiene la tabla, haremos una propiedad siguiendo este esquema:


'zona para definir las propiedades....                                                
PROPERTY Nombre AS Tipo
PRIVATE hNombre AS Tipo
....
....

'zona para definir el acceso de lectura y escritura a las propiedades 
PRIVATE FUNCTION Nombre_read() AS Tipo
RETURN hNombre
END
 
PRIVATE SUB Nombre_write(Valor AS Tipo)
hNombre = Valor
END
....
....

Nombre: vamos a nombrarlo como cada campo de la tabla
hNombre : sera una variable privada (solo lo usara la misma clase)
Tipo: aqui le tenemos que poner el tipo de dato (String, Integer, Float, etc)

Nos vamos a la clase Registro, y empazamos a crear estas propiedades:

'----------------------------
'zona para definir las propiedades....                      
'----------------------------                                  
Property nif As String
Private hnif As String


Property nombre As String
Private hnombre As String


Property apellidos As String
Private hapellidos As String


Property telefono As String
Private htelefono As String


Property movil As String
Private hmovil As String


Property domicilio As String
Private hdomicilio As String


Property ruta_grafica As String
Private hruta_grafica As String


Property ruta_mini As String
Private hruta_mini As String


'------------------------------------------ 
'zona para definir el acceso de lectura y escritura a las propiedades 
'------------------------------------------ 
Private Function ruta_mini_read() As String


Return hruta_mini


End


Private Sub ruta_mini_write(Valor As String)


hruta_mini = Valor


End


Private Function ruta_grafica_read() As String


Return hruta_grafica


End


Private Sub ruta_grafica_write(Valor As String)


hruta_grafica = Valor


End


Private Function domicilio_read() As String


Return hdomicilio


End


Private Sub domicilio_write(Valor As String)


hdomicilio = Valor


End


Private Function movil_read() As String


Return hmovil


End


Private Sub movil_write(Valor As String)


hmovil = Valor


End


Private Function telefono_read() As String


Return htelefono


End


Private Sub telefono_write(Valor As String)


htelefono = Valor


End


Private Function apellidos_read() As String


Return hapellidos


End


Private Sub apellidos_write(Valor As String)


hapellidos = Valor


End


Private Function nombre_read() As String


Return hnombre


End


Private Sub nombre_write(Valor As String)


hnombre = Valor


End


Private Function nif_read() As String


Return hnif


End


Private Sub nif_write(Valor As String)


hnif = Valor


End

Nota:
Este proceso es muy mecánico, para hacerlo más rápido podeis usar esta pequeña herramienta CreadorClasesGambas3.gambas



Si quereis ver como esta hecha, podeis descargar el código fuente en:

Tarea:
Para la clase Usuario, por cada campo de la tabla, hacer sus propiedades  correspondientes.


05 Clases: ¿ como se crean ?


En este proyecto vamos a usar el paradigma de Programación Orientada a Objetos (POO), ya que es la forma en que se programa actualmente.

Si quereis saber más sobre POO, podeis visitar este enlace Wikipedia Programación_orientada_a_objetos

Nuestro proyecto va a necesitar de varias clases.
a) La clase Registro:
Es la que se va a encargar de manejar la información (insertar, modificar, borrar, etc) que va a contener la tabla "datoslistin" de la base de datos.

b) La clase Usuario, que es la que se encargará de permitir el acceso a los usuarios y contener la información del nivel de usuario.


¿como crear una clase?
Tenemos que hacer click con el botón derecho en el lado izquierdo de la pantalla, en "Fuentes", aparece un menu, elegimos "Nuevo", y otro donde elegiremos en  "Clases"
Nota:
En este menu, es donde podremos añadir también Formularios y módulos.
Los módulos se usan para  contener funciones y subrutinas, en el paradigma de la programación Estructurada (ver para más detalles wiki Programación_estructurada)


Una vez que pulsamos en "Clases" aparece esta pantalla:
Donde podemos elegir la pestaña "Nuevo" (si la vamos a crear nueva) o "Existente" donde podremos elegir alguna que ya hayamos creado en otro proyecto , para que se añada a nuestro programa.

En nuestro nos quedamos en la pestaña "Nuevo", y ponemos el nombre a nuestra clase "Registro", y pulsamos "OK"

Nos aparece el editor de programación. Fijaros en la pestaña que estamos "Registro.Class", pulsando sobre estas pestañas, nos movemos entre los distintos archivos (formularios, clases) que componen nuestro proyecto.


 y ya podemos escribir el código fuente.

Os dejo la tarea de crear la clase "Usuario"






sábado, 21 de abril de 2012

04. Diagramas de nuestra aplicación

Ya tenemos todo configurado: mysql y gambas3

Además tenemos nuestro proyecto ya iniciado en gambas, con los componentes  necesarios activado y realizado la conexión a la base de datos.

Ahora vamos a pensar... ¿que es lo que queremos que haga la aplicación?

1º) Almacenar los datos de personas en la tabla "datoslistin"
2º) Controlar el acceso de los usuarios a esos datos. 



He hecho este esquema:


Aqui podemos ver como interactua el usuario.

1º El usuario entra en la aplicación y se le solicita atreves de un formulario su nombre y clave
2º Según sea el nivel del usuario podrá Ver,Editar,Borrar Datos del listin.
3º Si el usuario es Administrador, podrá también Ver, Editar, Borrar, los datos y privilegios de los usuarios.
4º Todo esto se hace con consultas a la base de datos.

En la próxima entrada veremos como crear los formularios y el código necesario para interactuar con la base de datos.