GUIA DE ESTUDIO Elaborado por: Ing. Alfredo Diaz GUIA DE ESTUDIO GAMBAS I. QUE ES GAMBAS? Gambas es un lenguaje de programacion libre y gratuito basado en el Basic. Es el acronimo de Gambas-Almost-Means-BASic, es decir, “Gambas, casi significa Basic”. En otras palabras, es un lenguaje orientado a objetos que utiliza instrucciones muy similares a las de otros entornos del Basic (como Visual Basic de Microsoft). Con este, se pueden realizar aplicaciones de escritorio complejas y distribuibles en diversas distribuciones de Linux como RedHat, Ubuntu, Debian, entre otras. II. QUE SE NECESITA PARA INSTALAR GAMBAS? Para instalar y utilizar gambas debemos contar con una PC reciente (Pentium 4 Dual Core, 1 Gb de RAM, Disco Duro con suficiente espacio libre (10Gb), video con resolucion de 1024x768, teclado y mouse) III. PARA ESTE CURSO SE UTILIZARA. -Gambas (version 2,16 o posterior) -Servidor de MySQL corriendo como servicio IV. INICIANDO GAMBAS DESDE UBUNTU 1. Para iniciar gambas, haga clic sobre el menu “Aplicaciones” de ubuntu, luego en “Programacion” y finalmente en “Gambas2” 2. Luego, se iniciara Gambas mostrando la siguiente ventana: 3, Aca se muestra un menu para crear un nuevo proyecto, abrirlo o ver algunos ejemplos incluidos con el paquete. Un Proyecto es una colección de archivos que al ser compilados (o traducidos al lenguaje maquina), puede ser ejecutado por el computador. Es de mencionar que un solo proyecto puede contener muchos archivos como Formularios, Modulos, imagenes, etc. 4. Seleccione la opcion “Nuevo proyecto” y aparecera la siguiente ventana> 5, Ahora, debemos elegir el tipo de proyecto. En este caso, podemos crear una aplicación grafica sencilla, basada en las bibliotecas QT, GTK+, una aplicación de consola (ejecutable desde el terminal), entre otras. A nuestros efectos, seleccione “Aplicacion Grafica” y presione “Siguiente”. 6. Haga clic en el panel izquierdo en la opcion “Home” y luego cree una nueva carpeta con el boton de carpeta brillante (el que aparece en la parte superior derecha en tercera posicion). 7, Coloque el nombre “sistema” (en minusculas) para terminar de crear la carpeta que contendra nuestra aplicación. 8, Hecho esto, presione el boton “Siguiente” y aparecera la proxima ventana. 9. Escri ba el nomb re “siste ma” y el titulo “siste ma”. Estos indican el nombre de proyecto y el titulo que aparecera en la ventana principal. Finalmente presione “OK” y aparecera el entorno de trabajo de Gambas. 10. ventana “Consejo para a trabajar. V. EL ENTORNO DE TRABAJO DE GAMBAS Cierre la del del Dia” empezar Gambas esta provisto de un entorno de trabajo intuitivo y amigable. El mismo, se describe a continuacion: Menu y Barra de herramientas Explorador de proyectos Botones de expansion Presione aquí para ver las propiedades Area de Trabajo Menu y Barras de Herramientas: Contienen distintas opciones que pueden ser desencadenadas por los usuarios al momento de realizar su trabajo como Abrir un proyecto, agregar elementos, depurar el programa, correrlo, empaquetarlo entre otras. Explorador de Proyectos: Muestra una lista jerarquica y por categorias con todos los elementos que componen el proyecto. Es decir, todos los formularios se organizan dentro del grupo “Formularios”, al igual que sucede con los modulos, clases y demas elementos. Area de Trabajo: Es el area gris que sirve de soporte a los formularios, modulos y demas elementos de la interfaz que se este disenando. Aparece al presionar la flecha Botones de Expansion: Son cada una de las puntas de flecha que aparecen a lo largo de todo el entorno de trabajo. Cuando se presionan, se expanden y muestran otros elementos como la ventana propiedades, y la ventana “consola”. Ventana Propiedades: Muestra un listado con cada una de las caracteristicas del objeto que se tenga seleccionado en ese momento, asi como el valor de dicha propiedad. Se utiliza para modificar el aspecto, comportamiento u otros aspectos relacionados con dicho objeto. VI. INICIANDO LA PROGRAMACION EN GAMBAS 1. En este curso, desarrollaremos un proyecto que conste de un formulario con acceso a datos; especificamente a un a base de datos academica que contiene una tabla de alumnos. Esto presupone que tenemos en nuestro equipo el MySQL previamente instalado con una base de datos llamada “central” y una tabla denominada “alumnos”. 2. Asi, debemos hacer doble click en el explorador de proyectos, especificamente en la categoria Formularios y luego en el Fmain que es creado de manera automatica por Gambas como formulario principal. Al hacer esto, se muestra la siguiente pantalla> 3. Ahora comenzaremos a dibujar la interfaz. Para ello, necesitaremos mostrar el Cuadro de Controles que no es mas que el conjunto de todos los objetos que podrian ser insertados en nuestro formulario. Para ello, Vayamos hacia la esquina inferior derecha de la ventana de gambas y clickeemos en el boton de punta de flecha hacia arriba. (El que se encuentra directamente debajo del recuadro gris de la ventana propiedades). 4. En este momento, aparecera el Cuadro de Controles. Gambas esta provisto de una serie de “clases” a partir de las cuales, se pueden crear objetos en el formulario. Recordemos que un Formulario es un objeto contenedor a manera de ventana sobre el cual vamos a trabajar y a programar de acuerdo a nuestras necesidades. 5. A continuacion se describen algunos objetos insertables que se nos presentan en el Cuadro de Controles. (de arriba hacia abajo y de izquierda a derecha) Select Este control sirve para seleccionar un objeto dentro del formulario. Label: Coloca una etiqueta o rotulo a un objeto dentro del formulario. TextLabel: Similar al Label, con pequenas variaciones en las propiedades. Separator: Dibuja una linea de separacion entre diversas secciones del formulario. PictureBox: Permite insertar imagenes estaticas MovieBox: Permite insertar gifs animados. ProgressBar: Crea una barra de progreso para aquellos procesos que ameriten mostrar avance de una actividad en el sistema. Button: Crea un boton de comando estandar (al presionarse desencadenan una accion). Checkbox: Crea una casilla de verificacion. Puede crear un conjunto de casillas de las cuales se pueden seleccionar varias opciones. RadioButton: Crea botones de opcion, es decir, un conjunto de opciones de las cuales se puede elegir “solo una”, la cual, excluye al resto del conjunto. ToggleButton: Es un control que permite insertar un tipo de botones que tienen exactamente la misma funcion de una casilla de verificacion; solo que en lugar de dibujar una casilla, se muestra como un boton presionado o no. ToolButton: Crea un boton muy pequeño tipico de una barra de herramientas. Slider: Crea un boton deslizable sobre una barra de ajuste, al estilo de un control de volumen. ScrollBar: Crea una barra de desplazamiento. ListBox: Crea una lista de opciones de las cuales se puede elegir una o varias. No permite el ingreso del texto. ComboBox: Dibuja un cuadro combinado; es decir, un cuadro de texto pero que ademas, incluye una lista de opciones de las cuales el usuario puede elegir solo una. Permite el ingreso de texto (a menos que el usuario apluque restricciones a esta opcion). TextBox: Crea un cuadro de texto, es decir, un recuadro sobre el cual el usuario puede escribir cualquier valor. SpinBox: Es un cuadro de texto dotado con una flecha hacia arriba y abajo que permite incrementar o decrementar un valor numerico. TextArea: Permite el ingreso de texto en varias lineas. ListView: Funciona de manera similar al ListBox, pero con algunas propiedades extendidas que incluyen la insercion de imagenes al lado de cada elemento. TreeView: Muestra una lista jerarquica de elementos agrupados en forma de arbol IconView: Permite mostrar una lista de iconos (como imagenes en miniatura) ColumnView: Dibuja un objeto que muestra un TreeView con columnas. Cada elemento debe tener una “clave” que lo diferencia del resto. GridView: Crea una cuadricula para mostrar datos. ColorButton: Crea un boton para selección de colores. DirView: Muestra una lista de directorios. FileView: Muestra una lista de archivos dentro del directorio especificado. TableView: Muestra una tabla de datos. ValueBox: Dibuja un cuadro de texto donde el usuario solo podra insertar valores numericos. VII. INSERTANDO UN OBJETO EN GAMBAS 1. Para insertar un objeto existen diversas maneras: a) Haciendo clic sobre el control deseado en el cuadro de controles y luego clickeando al formulario de manera sostenida hasta dibujarlo. b) Haga doble click sobre el control que desee insertar y al instante se creara sobre el formulario en la parte superior izquierda. 2. Inserte un objeto Label dentro de su formulario. Para ello, haga doble click sobre el objeto Label del cuadro de controles. Al hacer lo anterior, la imagen quedara asi: 3. Haga sobre el Label1 un clic objeto y procedamos a modificar la propiedad (Name) donde colocaremos txtcedula (en minuscula, sin acentos ni espacios en blanco) 4. Ahora, en la ventana propiedades buscamos la propiedad Text para modificar el rotulo o titulo del objeto que vera el usuario cuando ejecute la interfaz. En ella escribiremos Cedula (puede incluir acentos y espacios en blanco), quedando la figura asi: CONSIDERACIONES IMPORTANTES SOBRE EL NOMBRE DE LOS OBJETOS Al igual que ocurre en otros lenguajes, en Gambas, cada objeto insertado dentro de un formulario, y el fomulario mismo deben tener un nombre que lo distingue del resto. Para nombrarlos, se deben tomar una serie de consideraciones que se mencionan a continuacion: a. La propiedad que almacena el nombre es (Name), la cual aparece en segunda posicion dentro de la lista de propiedades, justo debajo de (Class). b. El nombre del objeto no puede comenzar por un numero, ni contener espacios ni caracteres especiales. c. El nombre debe ser descriptivo del contenido del objeto. El uso de nombres como Miobjeto1, OtroObjeto, Label1, Text1 no es recomendable porque no esta asociado al contenido del mismo. d. Los nombres de objeto, deben contener un prefijo que identifica el tipo de objeto con el que se esta trabajando. De esta manera, el programador durante la escritura de codigo puede identificar dicho objeto sin necesidad de ir a la vista de formulario. Estos prefijos no son obligatorios, pero si ampliamente recomendados. Aquí se espefician algunos de ellos: OBJETO PREFIJO EJEMPLO Formulario (Form) Etiqueta (Label) Cuadro de Texto (TextBox) Cuadro de Texto Numerico (ValueBox) Boton de Comando (CommandButton) Boton de Opcion (RadioButton) Casillas de verificacion (CheckBox) Cuadro con imagen (PictureBox) Cuadro Combinado (ComboBox) Cuadro de Pelicula (MovieBox) frm lbl txt txv cmd opt chk pic cmb mov frmAlumnos lblCedula txtCedula txvCedula cmdGuardar optMasculino chkRojo picFoto cmbEstado movVideo VIII. PREPARANDO EL ENTORNO DE DATOS PARA NUESTRA APLICACION. 1. El objeto de este curso es ilustrar la manera de crear un formulario vinculado a una base de datos con MySQL y que permita crear, editar, guardar, eliminar y buscar registros dentro de la tabla referenciada. 2. Para tal efecto, se supone que nuestro equipo esta configurado como servidor local de MySQL. Debemos asegurarnos de eso y para ello, hagamos lo siguiente: 3. Inicie un terminal haciendo click en Aplicaciones>Accesorios>Terminal Alli aparecera la siguiente ventana: 4. Inicie una sesion en el servidor MySQL tecleando: mysql -h “localhost” -u “root” -p <Enter> 5. En este momento, se le mostrara el mensaje “Enter Password” y debera presionar <Enter>. Recuerde que el password de MySQL de manera preestablecida es vacio. La ventana quedara asi: 5. Este es el “interprete de comandos” de mysql. Procederemos a crear una base de datos llamada “central”, razon por la cual, teclearemos lo siguiente: (debe colocar el punto y coma (;) al final de la linea de instrucción). CREATE DATABASE central; <Enter> 6. Ahora, seleccionaremos la base de datos tecleando USE central; <Enter> 7. Finalmente crearemos una sencilla tabla llamada “alumnos” con tres campos: cedula,nombre y apellido escribiendo lo siguiente: CREATE TABLE alumnos (cedula VARCHAR(9) NOT NULL, nombre VARCHAR(50) NOT NULL, apellido VARCHAR(50) NOT NULL, PRIMARY KEY cedula(cedula))TYPE=innoDB; Nota: Aunque esta instrucción puede estructurarse en varias lineas, se recomienda que la escriba en una sola y es obligatoria la escritura del punto y coma (;) al final de ella. 8, La ventana mostrara el mensaje “Query OK, 0 rows affected...” tal como se muestra en la siguiente figura: 9. Ya esta todo listo para volver a GAMBAS a disenar la interfaz de usuario. Importante: Puede utilizar el MySQL Navigator para administrar sus bases de datos MySQL desde un entorno Grafico. IX. PREPARANDO A GAMBAS PARA CONECTARSE CON MYSQL Para que Gambas pueda conectarse con un servidor MySQL es necesario activar dos referencias dentro de los componentes extendidos del lenguaje. Estas referencias no son mas que “clases” adicionales proporcionadas por diversos fabricantes o incluidas en el mismo paquete de Gambas, pero que de forma predeterminada no aparecen en el cuadro de controles. 1. Para acceder a los componentes, haga clic en el menu Proyecto>Propiedades o presione CONTROL+P. Y seleccione la pestana “Componentes”, tal como se muestra en la figura: 2. Tilde los siguientes componentes: gb.db y gb.db.mysql. Luego, presione OK para terminar. X. PERSPECTIVA DEL PROGRAMA 1. Tal como se refirio en apartados anteriores, se pretende crear una pequena aplicación que permita manejar datos desde gambas hacia una base de datos en MySQL. La misma debe funcionar asi: a. Debe contar con 7 botones: Agregar, Editar, Guardar, Cancelar, Eliminar, Consultar y Cerrar b. Debe tener al mismo tiempo, 3 cuadros de textos con sus respectivas etiquetas: Cedula, Nombre, Apellido. c. Al iniciar el formulario, todos los botones deben estar activados, dejando a Guardar y Cancelar como “Desactivados”. Por otra parte, todos los cuadros de texto estaran desactivados hasta que el usuario inicie una operación de “Agregar” o “Editar” registros. d. Cuando el usuario presione el boton “Agregar”, todos los cuadros de texto se deberan activar, ya que el sistema esperara a que el usuario ingrese los datos pertinentes. Al mismo tiempo, se desactivaran los botones “Nuevo”, “Editar”, “Eliminar”, “Consultar” y “Cerrar” dejando solo activos a “Guardar” y “Cancelar” dado que estas dos ultimas opciones son las unicas que el usuario puede ejecutar mientras se agrega un registro. e. Durante una operación de agregacion, se podran “Guardar” o “Cancelar” los cambios hechos al registro, y por tanto, al presionar alguno de estos 2 botones, el formulario volvera a su estado inicial. f. Si se presiona el boton “Editar” el procedimiento es exactamente igual. Se activaran los cuadros de texto y solo los botones “Guardar” y “Cancelar” dejando inactivos al resto, pero con la diferencia que antes de realizar estas acciones, se verificara si el registro a modificar se esta mostrando en pantalla. Tambien se debe acotar que no se podra modificar la cedula una vez guardada, ya que este es nuestro campo clave principal. g. En cuanto al boton eliminar, se debe mostrar un mensaje al usuario para confirmar dicha eliminacion antes de proceder a realizarla. h. El boton “Consultar” debe mostrar una pequena ventana donde el usuario ingrese la cedula del registro a buscar y hecho esto, se procedera a realizar dicha busqueda y mostrar los datos del registro encontrado. De no ser asi, se muestra un mensaje de error. 2. Volvamos a nuestro proyecto en Gambas y recordemos que hemos creado una etiqueta con la leyenda “Cedula”. Ingresemos dos mas, ubiquemos la propiedad “Text” y escribimos el texto “Nombre” y en la otra el texto “Apellido”. Dado que no utilizaremos las etiquetas en el codigo, podremos dejarlas con sus nombres predeterminados por Gambas. Recuerda: Para insertar un objeto en Gambas puedes hacerlo presionando doble click sobre el control marcado con una del cuadro de controiles y se insertara automaticamente en la parte superior izquierda del formulario. Hecho esto, debera moverlo a la posicion deseada, tal como se muestra en la siguiente figura: 3. Ahora, pegue tres cuadros de texto (TextBox) tal como se muestra en la figura: 4. Ubiquese en el “TextBox1” y haga un clic sobre el. Luego, en la ventana propiedades cambie la propiedad “Text” (que contiene “TextBox1”) y dejela en blanco para limpiar el contenido del campo. Al mismo tiempo, busque al inicio de la ventana propiedades la propiedad (Name) y escriba “txtCedula”. Y finalmente la propiedad “Enabled” debe cambarla de “True” a “False”. 5. Luego, ubique el “TextBox2” y haga un clic sobre el. Vaya a la ventana propiedades cambie la propiedad “Text” (que contiene “TextBox2”) y dejela en blanco para limpiar el contenido del campo. Al mismo tiempo, busque al inicio de la ventana propiedades la propiedad (Name) y escriba “txtNombre”. Y finalmente la propiedad “Enabled” debe cambarla de “True” a “False”. 6. Posteriormente, haga un clic sobre el TextBox3. Vaya a la ventana propiedades cambie la propiedad “Text” (que contiene “TextBox3”) y dejela en blanco para limpiar el contenido del campo. Al mismo tiempo, busque al inicio de la ventana propiedades la propiedad (Name) y escriba “txtApellido”. Y finalmente la propiedad “Enabled” debe cambarla de “True” a “False”. La ventana quedara como se muestra en la figura: 7. Ahora debemos insertar siete botones de comando en la parte inferior tal como se muestra: 8. Camb ie las propi edade s de los boton es de coma ndo tal como se muestra en el siguiente cuadro: OBJETO PROPIEDAD VALOR Button1 (Name) Text Enabled cmdAgregar Agregar True Button2 (Name) Text Enabled cmdEditar Editar True Button3 (Name) Text Enabled cmdGuardar Guardar False Button4 (Name) Text Enabled cmdCancelar Cancelar False Button5 (Name) cmdEliminar Button6 Button7 Text Enabled Eliminar True (Name) Text Enabled cmdConsultar Consultar True (Name) Text Enabled 9. El formulario quedara como se muestra en la siguiente figura: cmdCerrar Cerrar True 10. Ahora es el momento de agregar el codigo a nuestro formulario. Para ello, haga doble click sobre un area libre del formulario y se abrira la vista codigo, tal como se muestra en la siguiente figura: 11. En esta ventana se podran escribir todas las instrucciones que deseemos se ejecuten cuando se produce un evento de programa. En este caso, se esta editando el evento Open() del Objeto Form, se genera automaticamente un encabezado PUBLIC SUB Form_Open() donde PUBLIC SUB indica el inicio de un procedimiento y Form_Open() hace referencia al evento Open del Formulario actual. Es de hacer notar que todo PUBLIC SUB debe terminar con su respectivo END SUB... 12. Escriba fuera del procedimiento FORM_Open() las siguientes lineas de codigo (Justo despues del comentario 'Gambas Class File... ' Gambas class file PUBLIC Con AS NEW Connection PUBLIC res AS Result PUBLIC ssql AS String Y agregue el siguiente codigo al procedimiento FORM_Open() Con.Type = "MySQL" Con.Host = "localhost" Con.Login = "root" Con.Password = "" Con.Port = "3306" Con.Name = "central" Con.Open() Analicemos este codigo: Lo primero que observamos es la declaracion de dos variables. Para ello se utiliza la estructura DIM (aunque en este caso se utiliza PUBLIC) <nombre_var> AS <tipo de datos>. En este caso se crea una variable llamada “Con” de tipo Connection y otra llamada “res” de tipo “Result”. Esto quiere decir que estamos creando una variable que servira para conectarnos a un servidor de MySQL y otra para determinar con que tabla queremos trabajar. Es de destacar que la palabra PUBLIC quiere decir que la variable podra ser utilizada en cualquier parte o procedimiento dentro del formulario. Posteriormente, se modifican las propiedades de la variable “Con” que finalmente es un objeto invisible que hara referencia a la conexión. En este caso el Con.Type=”MySQL” quiere decir que el tipo de conexión a establecer es de MySQL. Asi mismo el Con.Host=”localhost” se refiere al nombre o IP del servidor al cual se conectara. En este caso, es el equipo local, razon por la cual se utiliza la palabra “localhost”. Por su parte, el Con.Login=”root” quiere decir que el usuario de MySQL que se conectara es el “root” y el Con.Password=”” queda vacio ya que corresponde a la contrasena con la cual se conectara el usuario. Asi mismo, el Con.Port=”3306” corresponde al puerto a traves del cual se conectara. Recuerde que este es el puerto predeterminado para todos los servidores MySQL. Por ultimo, Con.Name=”central” especifica que la base de datos que se abrira para trabajar es la que hemos creado con el nombre de “central”. Observacion: Aunque Gambas no es sensible a mayusculas y minusculas, el editor coloca en mayusculas las palabras reservadas del lenguaje, aunque las propiedades y metodos se colocan en mayusculas y minusculas. 13. Haga click sobre la pestana FMain.form que aparece en la parte superior de la vista formulario y volvera al objeto principal. Ahora haga doble clic sobre el boton cmdAgregar para abrir el evento PUBLIC SUB cmdAgregar_Click(). Alli, agregue el siguiente codigo: 'Activa los cuadros de texto para que el usuario escriba en ellos txtCedula.enabled = TRUE txtApellido.Enabled = TRUE txtNombre.Enabled = TRUE 'Limpia los cuadros de texto ya que se colocaran los valores 'del nuevo registro txtApellido.Text = "" txtNombre.Text = "" txtCedula.Text = "" 'Desactiva los botones de Agregar, Editar, Eliminar, 'Consultar y Cerrar cmdAgregar.Enabled = FALSE cmdEditar.Enabled = FALSE cmdEliminar.Enabled = FALSE cmdConsultar.Enabled = FALSE cmdCerrar.Enabled = FALSE 'Y activa solamente los de Guardar y Cancelar 'Ya que son las unicas acciones permitidas para durante 'la creacion de un registro cmdGuardar.Enabled = TRUE cmdCancelar.Enabled = TRUE Observacion: Se incluyen los comentarios de cada bloque de codigo para mayor claridad. Entonces, al escribir cmdAgregar.Enabled=FALSE quiere decir que se esta modificando la propiedad “Enabled” del objeto “cmdAgregar” que esta dentro del formulario actual, en este caso, FMain La propiedad “Enabled” activa o desactiva un objeto; mientras que la propiedad “Text” modifica el valor de los textboxes “txtCedula”, “txtNombre” y “txtApellido”, es decir, en este caso, los “limpia” para que el usuario escriba cualquier valor y posteriormente guarde el registro. 14, Ahora, vaya nuevamente al formulario (clickee en la pestana FMain.form) y luego haga doble click en el boton “cmdEditar” para agregar el codigo en el procedimiento PUBLIC SUB cmdEditar_Click() IF Trim(txtCedula.TEXT) =”” THEN Message.Error("Debe mostrar un registro para modificarlo") ELSE 'Activa los cuadros de texto para que el usuario escriba en ellos txtApellido.Enabled = TRUE txtNombre.Enabled = TRUE txtCedula.Enabled = FALSE 'Desactiva los botones de Agregar, Editar, Eliminar, 'Consultar y Cerrar cmdAgregar.Enabled = FALSE cmdEditar.Enabled = FALSE cmdEliminar.Enabled = FALSE cmdConsultar.Enabled = FALSE cmdCerrar.Enabled = FALSE 'Y activa solamente los de Guardar y Cancelar 'Ya que son las unicas acciones permitidas para durante 'la edicion de un registro cmdGuardar.Enabled = TRUE cmdCancelar.Enabled = TRUE ENDIF Lo mas destacable del codigo es la estructura IF.. THEN.. ENDIF que se utiliza para tomar decisiones. Su sintaxis general es la siguiente: IF <condicion> THEN sentencias.... ELSE sentencias... ENDIF Es decir, si la condicion es verdadera, ejecuta el primer bloque de instrucciones. En el caso contrario, ejecuta el segundo bloque, pero nunca se ejecutan ambos. La estructura ELSE es opcional. Para el caso de nuestro programa, se verifica que el cuadro de texto txtCedula tenga “algo” en la propiedad text. Si efectivamente esto ocurre, quiere decir que acabamos de consultar un registro y podremos editarlo, pero si esta vacio, mostrara un error. Es importante destacar la funcion TRIM() que elimina los caracteres en blanco de inicio y final en una cadena. En este caso, se eliminan dichos espacios de la propiedad “Text” del cuadro de texto “txtCedula” antes de determinar si contiene un valor o no. Por otra parte, tenemos la funcion “Message” que muestra un cuadro de mensaje de advertencia, error, informacion o pregunta. En este caso, se muestra uno de error indicando que no se ha cargado un registro. Para ello se utiliza la siguiente linea de codigo: Message.Error("Debe mostrar un registro para modificarlo") El codigo restante no es mas que la activacion de los cuadros de texto (exceptuando el de cedula ya que no se recomienda cambiar el valor de nuestra llave primaria). Luego, esta la activacion y desactivacion de los botones de manera identica al evento cmdAgregar_Click() 15, Clickeamos en la pestana FMain.form para volver a la vista formulario y hagamos doble click sobre el boton “Cerrar” para escribir el codigo en el procedimiento PUBLIC SUB cmdCerrar_Click() ME.Close Aquí lo unico a resaltar es el metodo “Close” del objeto formulario (ME) que cierra el formulario actual. 16, Procedemos entonces a agregar el codigo del boton “Guardar”. Vayamos a la vista formulario y hacemos doble click sobre el boton “Guardar”. Alli, agregamos el siguiente codigo: 'Si el apellido, nombre o cedula estan en blanco, muestra un mensaje de error IF txtApellido.text = "" OR txtCedula.text = "" OR txtNombre.text = "" THEN Message.Error("Debe ingresar el nombre, apellido y cedula del alumno para guardar el registro") RETURN 'Sale del procedimiento de Guardar ENDIF 'Busca algun alumno que corresponda con la cedula que se esta ingresando... ssql = "SELECT * FROM alumnos WHERE cedula='" & Trim(txtCedula.text) & "'" res = db.exec(ssql) 'Ejecuta la consulta 'El res.count devuelve 0 si no existen registros coincidientes con la cedula ingresada. Eso indica que es 'un registro nuevo... IF res.count > 0 THEN 'Pero si ya existe la cedula, pregunta si se van a actualizar los datos... IF Message.Warning("Se ha encontrado un registro con esa cedula. Actualizar Datos?", "Si", "No") = 1 THEN 'Si es positiva la respuesta, se borra el registro previo para luego crearlo nuevamente. db.Exec("DELETE FROM alumnos WHERE cedula='" & Trim(txtCedula.text) & "'") ELSE 'De lo contrario, sale de esta rutina y no hace nada RETURN ENDIF ENDIF 'Aqui se crea el registro con los datos del alumno (cedula, nombre, apellido) ssqL = "INSERT INTO alumnos (cedula,nombre,apellido) VALUES('" & Trim(txtCedula.text) & "','" & Trim(txtNombre.text) & "','" & Trim(txtApellido.text) & "')" db.exec(ssql) 'Se ejecuta la consulta Message.Info("Registro Guardado Exitosamente") 'Y emite un mensaje que indica el registro guardado 'Desactiva los cuadros de texto txtCedula.enabled = FALSE txtApellido.Enabled = FALSE txtNombre.Enabled = FALSE 'Y activa los botones Agregar, Editar, Consultar, Eliminar y Cerrar 'Desactiva Guardar y Cancelar cmdAgregar.Enabled = TRUE cmdEditar.Enabled = TRUE cmdConsultar.Enabled = TRUE cmdCerrar.Enabled = TRUE cmdEliminar.Enabled = TRUE cmdGuardar.Enabled = FALSE cmdCancelar.Enabled = FALSE Lo primero que se observa es una validacion en la cual se verifica que los cuadros de texto txtCedula, txtNombre y txtApellido tengan un valor. (IF txtApellido.text=”” ….) Esto garantiza que todos los campos obligatorios reciban un valor. De existir algun campo en blanco, se muestra un error. Luego, se observa una variable llamada “ssql” de tipo cadena, la cual, permitira enviar una consulta SQL para obtener aquel registro que corresponda con la cedula que se pretende ingresar. Para ello, se utiliza la instrucción db.EXEC() que recibira dicha variable de cadena. Notese que la linea de instrucción res = db.exec(ssql) permite guardar el resultado de la consulta dentro de la variable “res”. Luego, si res.count da mayor que cero, quiere decir que si existe algun registro previamente ingresado con esa cedula. Por eso, debemos preguntar si se desean actualizar los datos de ese registro o no. De alli, surge la instruccion IF Message.Warning("Se ha encontrado un registro con esa cedula. Actualizar Datos?", "Si", "No") = 1 THEN que muestra un mensaje de advertencia con dos posibles opciones: “Si” o “No” actualizar dichos datos. Si el usuario responde “Si”, se eliminara el registro para crearlo nuevamente, razon por la cual, se observa la instrucción db.Exec("DELETE FROM alumnos WHERE cedula='" & Trim(txtCedula.text) & "'") Pero si responde “No”, sencillamente sale del procedimiento con la instrucción “RETURN” Por ultimo, se procede a crear el registro propiamente dicho con la siguiente consulta SQL ssqL = "INSERT INTO alumnos (cedula,nombre,apellido) VALUES('" & Trim(txtCedula.text) & "','" & Trim(txtNombre.text) & "','" & Trim(txtApellido.text) & "')" y para ejecutarla utilizaremos db.exec(ssql) Posteriormente se emite un mensaje avisando al usuario el “guardado” del registro y se desactivan los cuadros de texto y por ende, los botones necesarios. 17, Ahora, es el momento de agregar el codigo del boton “Cancelar”. El codigo es bastante simple y autodescriptivo. 'Desactivamos los cuadros de texto txtApellido.Enabled = FALSE txtNombre.Enabled = FALSE txtCedula.Enabled = FALSE 'Activa los botones de Agregar, Editar, Eliminar, Consultar y Cerrar cmdAgregar.Enabled = TRUE cmdEditar.Enabled = TRUE cmdEliminar.Enabled = TRUE cmdConsultar.Enabled = TRUE cmdCerrar.Enabled = TRUE 'Y desactiva los de Guardar y Cancelar cmdGuardar.Enabled = FALSE cmdCancelar.Enabled = FALSE 18, En este punto agregamos el codigo del boton “Eliminar” para lo cual, debemos ir a la vista Formulario y hacer doble click sobre ese boton. Luego, agregamos el siguiente codigo: IF Trim(txtCedula.TEXT) = "" THEN Message.Error("No ha cargado el registro que desea eliminar") ELSE ssql = "SELECT * FROM alumnos WHERE cedula='" & Trim(txtCedula.text) & "'" res = db.Exec(ssql) IF res.count > 0 THEN IF Message.Question("Eliminar el Registro Actual?", "Si", "No") = 1 THEN db.Exec("DELETE FROM alumnos WHERE cedula='" & Trim(txtCedula.text) & "'") Message.Info("Registro Eliminado") ENDIF ENDIF ENDIF El codigo no es demasiado complejo. Simplemente se verifica que el cuadro de texto”Cedula” tenga algun valor lo que indica que hay un registro mostrandose en pantalla para ser eliminado. Luego, se ejecuta una consulta donde se busca el registro que corresponda con la cedula en cuestion y el resultado se asigna a la variable “res”. Si existe un registro coincidiente, se pregunta si desea eliminarlo. Luego, si responde positivamente, se ejecuta una consulta de eliminacion (DELETE FROM alumnos WHERE...) y finalmente se muestra un mensaje al usuario informandole el resultado del proceso. 19. Procedamos a agregar el codigo del boton “Consultar”. DIM cedula AS String cedula = InputBox("Ingrese la Cedula que desea buscar", "Consultar por Cedula") IF Trim(cedula) = "" THEN Message.Error("La cedula ingresada es invalida") RETURN ENDIF res = db.Exec("SELECT * FROM alumnos WHERE cedula='" & Trim(cedula) & "'") IF res.count> 0 THEN txtApellido.TEXT = Trim(res!apellido) txtNombre.text = Trim(res!nombre) txtcedula.text = Trim(res!cedula) ELSE Message.Error("No se encontro un registro con la cedula especificada") ENDIF En lo concerniente al codigo, de observa la declaracion de una variable llamada “cedula” que servira para la busqueda. Esta recibira el valor ingresado por el usuario correspondiente a la cedula que desea buscar dentro de la tabla. La instrucción InputBox dibuja un pequeño cuadro de mensaje y asigna el valor ingresado a la variable “cedula”. Posteriormente, se verifica que se haya ingresado “algo” para buscar y en el caso de que no sea asi, se muestra un mensaje de error. Posteriormente, se ejecuta una consulta para buscar dentro de la tabla la cedula ingresada. Se asigna a la variable de resultados “res” y si la cuenta de registros es mayor que cero, significa que existe el registro en cuestion. Luego, se asigna a cada cuadro de texto el valor que tiene cada campo de la tabla, finalizando asi el proceso. 20, Guarde el proyecto y el formulario. Para ello, haga click sobre el menu Archivo>Guardar Proyecto (o CONTROL+ALT+S). 21. Es el momento de probar el formulario en ejecucion, para lo cual presionamos la tecla F5 y de esta manera, pasamos del tiempo de diseno al tiempo de ejecucion. Pruebe agregando, modificando, eliminando y buscando registros desde el formulario.