Gambas es un entorno de desarrollo que se distribuye con la licencia GPL GNU, con esto podemos decir que no solo es un lenguaje de programación procedente del lenguaje basic sino que también es una herramienta muy útil a la hora de construir aplicaciones visuales para casi cualquier distribución de GNU/Linux.
En Gambas, el programador tiene la facilidad de diseñar las ventanas de forma gráfica, arrastrando objetos desde la caja de herramientas y después escribiendo el código en basic para cada objeto.
Como vimos anteriormente, Gambas es basado en un intérprete basic con extensiones de objetos, parecido a Visual Basic. Pero la ventaja que tenemos con Gambas, es que puedes diseñar rápidamente tu aplicación gráfica con QT o GTK+, acceder a bases de datos MySQL, PostgreSQL, Firebird, ODBC y SQLite, controlar aplicaciones con DBUS, construir Front End de comandos de Linux, hacer aplicaciones 3D OpenGL, hacer aplicaciones web CGI, generar paquetes de instalación para diversas distribuciones, entre otras.
Por esta razón, podemos decir entonces que en Gambas no es una copia o clon de Visual Basic, ya que a pesar de estar basado en basic, es una alternativa para crear programas y aplicaciones para entornos GNU. Si vemos un poco de la historia de gambas, nos encontraremos con que la primera versión de gambas fue liberada en 1999 por el francés Benoît Minisini, creando un entorno que nos permitiera programar y desarrollar aplicaciones fácilmente con interfaz gráfica para el usuario.
Al principio, la forma de programa en Gambas era parecida a la de Gimp, con varias ventanas, y orientada al uso de Qt y KDE. Cuando dio el salto a las versiones 2.x en el año 2008 supuso un rediseño por completo de la interfaz gráfica de programación, integrando todo en una sola ventana, y permitiendo el uso de GTK+. En el 2011 saltó a la versión 3.x.
Empecemos con la instalación de Gambas3.
1. Cómo instalar Gambas3
La sencillez de Gambas hace fácil su uso por lo que no es necesario conocer ningún lenguaje de programación. Tan solo hace falta contar con un manual gratuito y dedicarle algo de tiempo. Por este motivo, es perfecto para aprender si estás comenzando. Bueno, vamos a aprender cómo instalarlo en nuestro sistema operativo Linux:
Primero, debemos abrir la terminal de comandos e introducir estos comandos uno por uno:
sudo add-apt-repository ppa:gambas-team/gambas-daily sudo apt-get update sudo apt-get install gambas3Comandos instalación Gambas
Con esta línea de comandos podremos obtener la última versión liberada de Gambas. Actualmente van por la 3.8.1, aunque yo recomiendo tener la versión más estable que podemos obtener usando estos otros comandos, pero hay que tener en cuenta que nunca podremos sumar los dos PPA a la vez, solo podremos tener uno de los dos, esto se debe a que podríamos provocar un error y tendríamos que comenzar de nuevo limpiando las instalaciones previas.
2. Crear proyecto Gambas con BBDD e informe
Lo primero que debemos hacer es diseñar la base de datos que necesitamos para almacenar nuestra información. La que yo propongo se llamará “estudiantes” y tendrá dos tablas (alumnos y asignaturas).
Tabla alumnos: id, cedula, nombres, apellidos, direccion, telefono y correo. Tabla Asignaturas: id, nom_materiaPara realizarla usamos un gestor muy simple para el diseño de bases de datos, llamado SQLite Data Browser, lo abrimos y creamos la base de datos haciendo clic en el botón nuevo. Ubicamos dónde la guardaremos y creamos las tablas según el diseño anterior.
Una vez creada quedaría así:
Dejaremos como clave primaria el campo cedula en ambas tablas. Antes de cerrar el mini-gestor, le agregamos algunos datos para comprobar su funcionamiento cuando estemos diseñando los formularios en el programa. Ahora si podemos hacer clic en el botón guardar y cerrar el mini gestor databrowser.
3. Realizando el programa Gambas
Abrimos Gambas y creamos un nuevo proyecto dándole el nombre y la ruta correspondiente:
Para mayor comodidad, colocamos la base de datos creada dentro de la carpeta creada para el proyecto, en este caso la carpeta llamada GestionEstudiantes, así será fácil al momento de ubicar su ruta en el programa.
‘Configuramos el boton de salir. Public Sub btnCerrar_Click() Quit EndCreamos dos formularios nuevos, para ingresar estudiantes y para las asignaturas.
Ahora configuramos el botón de ingresar estudiantes:
Public Sub btnNuevoEstudiante_Click() FMain.Hide FormEstudiantes.Show EndIgualmente configuramos el botón agregar asignatura:
Public Sub btnNuevaAsignatura_Click() FMain.Hide FormCursos.Show EndAsí lo habremos asignado.
4. Diseño del formulario para ingresar estudiantes
Para comenzar, colocamos un columview y dos botones a los que les pondremos el texto nuevo y salir respectivamente (Propiedad text).
Podemos, si así lo deseamos, agregar un ícono a cada botón mediante su propiedad picture. Al columview lo llamaremos sencillamente “tabla” (En propiedad name) pues se asemeja mucho a cualquier tabla y estamos tratando de mantener este primer proyecto de base de datos lo más sencillo posible.
Los botones los llamaremos: btnnuevo y btnsalir.
El formulario quedaría así:
Configuramos el botón cerrar del formulario.
Public Sub btnSalir_Click() Me.Close EndAhora nos pasamos a codificar.
5. Comenzamos a codificar Gambas
Vamos a comenzar a poner algo de código a nuestro programa, y lo iremos comentando. Lo primero en una base de datos es la conexión a la misma. Para esto, Gambas nos provee el objeto Connection.
Todo lo que aparece con un apostrofe simple en el código es un comentario que no será interpretado por el programa.
Ejemplo:
'Proyecto Prueba Private hconn As Connection 'variable para establecer la coneccion Private Function ConectarBase() As Boolean 'variable para la coneccion, devuelve un valor verdadero o falso If hconn <> Null Then Return False 'comprobamos que la conexión no este abierta hconn = New Connection 'inicializamos la conexion con el metodo new y despues le pasamos los paramentros con hconn 'parametro para la ruta de la base de datos hconn.Host = "/home/prueba" hconn.Name = "estudiantes" 'nombre de la base de datos hconn.Type = "sqlite3" 'tipo de base de datos Try hconn.Open() 'tratamos de abrir la conexion si no lo logramos enviamos un mensaje de error y le damos el valor null If Error Then hconn = Null Message.Error("Error al conectar con la base de datos") Return True Endif Return False EndUna vez que hayas copiado el código anterior haz clic en la opción ejecutar del menú Depuración. Si todo va bien, no deberá salir ningún error y aparecerá nuevamente la pantalla de nuestro proyecto. Lo cual quiere decir que la conexión a nuestra Base de Datos se ha realizado satisfactoriamente.
En el caso de algún error, a continuación te doy posibles causas:
1. Al copiar y pegar el código debes tener en cuenta las comillas, las cuales muchas veces se cambian al copiar y pegar y por consiguiente no son reconocidas por la aplicación. En este caso, lo recomendable es borrar las comillas y colocarlas manualmente. El código dentro de las comillas debe estar en color fucsia para saber que está bien.
2. Otro posible error es no haber marcado las opciones correspondientes en la pestaña de Propiedades del Proyecto, la cual se encuentra haciendo clic en menú de Proyecto, luego Propiedades y allí en la pestaña Componentes, comprueba que estén marcadas las opciones siguientes:
- bg
- gb.db
- gb.db.sqlite3
- gb.form
- gb.db.mysql (Ésta no debería ser necesaria por la base de datos que realizamos, pero la marcamos de todas maneras)
3. Otro error muy común es la ruta donde tenemos tanto el proyecto, como la base de datos que es donde están las líneas resaltadas en el código a copiar y pegar.
Ya después de corregir los posibles errores y comprobar que funciona nuestra aplicación, procedemos a cerrar la conexión colocando el siguiente código al final.
PUBLIC SUB cerrarconexion() IF hconn = NULL THEN RETURN hconn.Close() hconn = NULL ENDPrimero vemos que ya no esté cerrada, si no es así la cerramos con .close
6. Visualizar datos almacenados
Abrimos el formulario y dentro del proceso Form y colocamos el siguiente código:
(No olvidar revisar las comillas que al pegar el código se pudieron haber cambiado).
Public Sub Form_Open() 'primero declaramos las variables y limpiamos el columnview Dim hresul As Result Dim clave As String Dim filtro As String tabla.Clear If ConectarBase() Then Return 'confirmamos conexion con la bse de datos 'definimos las propiedades para el columnview 'count para cantidad de columnas 'text para el titulo de las columnas 'width para el ancho de las columnas 'alignment para la alineacion de los campos. tabla.Columns.Count = 6 tabla.Columns[0].Text = "Cedula" tabla.Columns[0].Alignment = Align.Center tabla.Columns[0].Width = 100 tabla.Columns[1].Text = "Nombres" tabla.Columns[1].Alignment = Align.Center tabla.Columns[1].Width = 120 tabla.Columns[2].Text = "Apellidos" tabla.Columns[2].Alignment = Align.Center tabla.Columns[2].Width = 120 tabla.Columns[3].Text = "Dirección" tabla.Columns[3].Alignment = Align.Center tabla.Columns[3].Width = 120 tabla.Columns[4].Text = "Teléfono" tabla.Columns[4].Alignment = Align.Center tabla.Columns[4].Width = 120 tabla.Columns[5].Text = "Correo" tabla.Columns[5].Alignment = Align.Center tabla.Columns[5].Width = 120 hresul = hconn.Exec("select * from alumnos") 'Esta instrucción busca en la base de datos, si encuentra datos hace que la variable hresul sea verdadera y por tanto esté disponible (Available) Do While hresul.Available 'luego recorrerá la tabla con un bucle do while basándose en la clave(Cedula) e irá rellenando la tabla con los datos. clave = hresul["cedula"] 'hacemos el campo cédula como primario para las búsquedas tabla.Add(clave, clave) 'agregamos los datos encontrados en la base de datos. tabla[clave][1] = hresul["nombres"] tabla[clave][2] = hresul["apellidos"] tabla[clave][3] = hresul["direccion"] tabla[clave][4] = hresul["telefono"] tabla[clave][5] = hresul["correo"] hresul.MoveNext() 'esta instrucción hace avanzar la búsqueda al siguiente dato Loop 'Vuelve a ejecutar las instrucciones dentro del bucle hasta que no haya más datos para mostrar. CerrarConexion() 'cierra la conexión EndProceso Form
Al terminar lo corremos y comprobamos su funcionamiento, lo cual devolverá el siguiente resultado:
7. Crear formulario para ingresar datos de estudiantes
Ahora vamos a crear un nuevo formulario que nos permita ingresar datos de nuevos estudiantes, el nombre sugerido parta el mismo es edata.
El mismo tendrá los siguientes objetos: 6 etiquetas label, 6 cajas de texto y dos botones.
El diseño sugerido es el siguiente:
Para ver si todo va bien, vamos al formulario que muestra la lista de estudiantes y configuramos el botón nuevo de la siguiente manera:
Si no hay errores y todo va bien, pasemos a configurar el formulario recién creado para ingresar nuevos datos de estudiantes. Este formulario recibirá una referencia a un objeto del tipo connection, en nuestro caso hconn por lo tanto lo ubicamos al principio de nuestro formulario.
' Gambas class file ' primero configuramos la coneccion Private hconn As Connection 'creamos un metodo runnew que será llamado desde el formulario que lista los estudiantes Public Sub runnew(data As Connection) hconn = data 'referencia para el formulario anterior Me.ShowModal() 'obliga a interactuar con el formulario antes de cerrarlo End Configuramos el botón de cancelar: Public Sub btnCancelar_Click() Me.Close(0) End Para ingresar nuevos datos, utilizaremos la siguiente instrucción: TRY hconn.EXEC (“insert into mitabla values (&1,&2,&3,&4,&5.&6)”, txtid,txtnombre,txtapellido,txttelefono,txtmovil,txtcumple) exec Los campos serán llamados mediante un ampersand y el índice correspondiente como se muestra a continuación. (&1,&2,&3,&4,&5.&6)Volvamos al formulario anterior y configuremos el botón aceptar de la siguiente manera:
Primeros tratamos de conectarnos a nuestra base de datos, si no lo conseguimos, nos salimos. Conseguida la conexión llamamos al método runnewde fdata. Como este formulario se muestra en forma modal, el presente código queda a la espera de que ingresemos datos en fdata o simplemente lo cerramos.
A continuación cierra la conexión y llama al método form_open que se encarga de recargar los datos para mostrar los cambios realizados. Ahora vamos a ver cómo hacemos para modificar un registro, por ejemplo si un amigo cambia el móvil, basta con editar ese campo.
Vamos a aprovechar el evento activate de nuestro control colunmview(tabla) para agregar esta funcionalidad. Dicho evento se dispara al hacer doble clic sobre alguna columna de la tabla.
Public Sub tabla_Activate() Dim hresul As Result If tabla.Current = Null Then Return If ConectarBase() Then Return hresul = hconn.Edit("alumnos", "cedula=&1", tabla.Current.Key) edata.runedit(hresul) 'Llama al método runeedit del formulario edata tabla.Current[0] = hresul["cedula"] tabla.Current[1] = hresul["nombres"] tabla.Current[2] = hresul["apellidos"] tabla.Current[3] = hresul["direccion"] tabla.Current[4] = hresul["telefono"] tabla.Current[5] = hresul["correo"] cerrarConexion() EndEvento activate
La línea en negrita es la que llama al método runedit de edata. Como aún no hemos creado este método, si tratamos de ejecutarlo ahora, no funcionará.
Volvamos por lo tanto a edata y coloquemos las siguientes variables al principio del formulario para que sean accesibles desde todo el formulario.
Private hconn As Connection Private hresul As Result Private editando As BooleanLuego creemos el nuevo método llamado runedit:
Public Sub runedit(data As Result) hresul = data editando = True txtCedula.Text = hresul["cedula"] txtNombres.Text = hresul["nombres"] txtApellidos.Text = hresul["apellidos"] txtDireccion.Text = hresul["direccion"] txtTelefono.Text = hresul["telefono"] txtCorreo.Text = hresul["correo"] Me.ShowModal EndEsto nos muestra edata con los datos del registro seleccionado de modo que podamos editarlo y pone la variable editando con el valor true. Esto es necesario para que mediante una instrucción condicional al hacer clic en btnaceptar distinga entre nuevo y modificar.
Podemos probarlo aunque todavía no funcionará, falta configurar el botón aceptar, pero sí podemos comprobar que nos lleva hasta el formulario solicitado.
Configuremos el botón aceptar para guardar los cambios:
Public Sub btnAceptar_Click() If editando Then Try hresul["cedula"] = txtCedula.Text Try hresul["nombres"] = txtNombres.Text Try hresul["apellidos"] = txtApellidos.Text Try hresul["direccion"] = txtDireccion.Text Try hresul["teleefono"] = txtTelefono.Text Try hresul["correo"] = txtCorreo.Text Try hresul.Update Else Try hconn.Exec("insert into alumnos values(&1,&2,&3,&4,&5,&6)", txtCedula.Text, txtNombres.Text, txtApellidos.Text, txtDireccion.Text, txtTelefono.Text, txtCorreo.Text) 'con esto ingresamos la informacion enviada Endif Me.Close() Catch Message.Error("Imposible introducir los datos enviados") EndPodremos ya guardar los cambios.
8. Configurar la búsqueda de datos
Agreguemos al formulario, un botón para buscar y un textbox. Éste es el nuevo aspecto del formulario:
Configuramos el botón buscar de manera similar al botón nuevo, este es el código:
Public Sub btnBuscar_Click() Dim hresul As Result Dim clave As String Dim filtro As String tabla.Clear If ConectarBase() Then Return tabla.Columns.Count = 6 tabla.Columns[0].Text = "Cedula" tabla.Columns[0].Alignment = Align.Center tabla.Columns[0].Width = 100 tabla.Columns[1].Text = "Nombres" tabla.Columns[1].Alignment = Align.Center tabla.Columns[1].Width = 120 tabla.Columns[2].Text = "Apellidos" tabla.Columns[2].Alignment = Align.Center tabla.Columns[2].Width = 120 tabla.Columns[3].Text = "Dirección" tabla.Columns[3].Alignment = Align.Center tabla.Columns[3].Width = 120 tabla.Columns[4].Text = "Teléfono" tabla.Columns[4].Alignment = Align.Center tabla.Columns[4].Width = 120 tabla.Columns[5].Text = "Correo" tabla.Columns[5].Alignment = Align.Center tabla.Columns[5].Width = 120 filtro = txtBuscar.Text hresul = hconn.Exec("select * from alumnos where nombres like '" & filtro & "'") Do While hresul.Available clave = hresul["cedula"] tabla.Add(clave, clave) tabla[clave][1] = hresul["nombres"] tabla[clave][2] = hresul["apellidos"] tabla[clave][3] = hresul["direccion"] tabla[clave][4] = hresul["telefono"] tabla[clave][5] = hresul["correo"] hresul.MoveNext() Loop cerrarConexion() EndYa con lo que hemos realizado podemos tener ya claro cómo es el proceso, ahora vamos a hacer lo mismo con el formulario para las materias. El diseño sugerido es el siguiente:
Como siempre, lo primero que vamos a programar es el botón salir:
Public Sub btnSalir_Click() Me.Close EndAhora realizaremos la conexión a la base de datos:
Private hconn As Connection Private Function conectarbase() As Boolean If hconn <> Null Then Return False hconn = New Connection hconn.Host = "/home/prueba" hconn.Name = "estudiantes" 'nombre de la base de datos hconn.Type = "sqlite3" 'tipo de base de datos Try hconn.Open() If Error Then hconn = Null Message.Error("Error al conectar la base de datos") Return True Endif Return False EndProgramamos el evento para cerrar la conexión:
Public Sub cerrarConexion() If hconn = Null Then Return hconn.Close() hconn = Null EndAhora visualizamos los datos en el columview, en el evento open del formulario.
El código es el siguiente:
Public Sub Form_Open() Dim hresul As Result Dim clave As String Dim filtro As String tabla2.Clear If conectarbase() Then Return tabla2.Columns.Count = 2 tabla2.Columns[0].Text = "id" tabla2.Columns[0].Alignment = Align.Right tabla2.Columns[1].Text = "Nombre de la Asignatura o Curso" hresul = hconn.Exec("select * from asignaturas") Do While hresul.Available clave = hresul["id"] tabla2.Add(clave, clave) tabla2[clave][1] = hresul["nom_materia"] hresul.MoveNext() Loop cerrarConexion() EndAhora creamos el formulario para agregar y/o editar los datos de la tabla, asignaturas o cursos. El nombre sugerido es adata. (asignaturas datos).
9. Programamos el botón de cerrar
Public Sub btnCerrar_Click() Me.Close EndCreamos la referencia a un objeto del tipo connection, en nuestro caso hconn, por tanto al principio de nuestro formulario adata colocaremos el siguiente código:
Private hconn As ConnectionAdemás, creamos el método runnew que será llamado desde el formulario principal. La sintaxis es la siguiente:
Public Sub runnew(data As Connection) hconn = data Me.ShowModal() EndVamos ahora al formulario de ingresar los datos de las asignaturas y en el evento clic de btnnuevo colocamos el siguiente código:
Public Sub btnNuevo_Click() If conectarbase() Then Return adata.runnew(hconn) cerrarConexion() Form_Open() EndAhora podemos probar el botón nuevo de dicho formulario.
Continuando con el mismo formulario, codificamos el método para modificar registros de la siguiente manera. Vamos a aprovechar el evento activate de nuestro control colunmview(tabla) para agregar esta funcionalidad. Dicho evento se dispara al hacer doble clic sobre alguna columna de la tabla.
Public Sub tabla2_Activate() Dim hresul As Result If tabla2.Current = Null Then Return If conectarbase() Then Return hresul = hconn.Edit("asignaturas", "id=&1", tabla2.Current.Key) adata.runedit(hresul) tabla2.Current[0] = hresul["id"] tabla2.Current[1] = hresul["nom_materia"] cerrarConexion() EndRecuerda que no funcionará hasta que hayamos creado dicho evento en el formulario adata. Volvamos por tanto a fdata y coloquemos las siguientes variables al principio del formulario para que sean accesibles desde todo el formulario.
PRIVATE hconn AS Connection PRIVATE hresul AS Result PRIVATE editando AS BooleanCreamos el método runedit cuyo código es el siguiente:
Public Sub runedit(data As Result) hresul = data editando = True txtAsignaturas.Text = hresul["nom_materia"] Me.ShowModal EndRecuerda ir probando para comprobar que todo vaya bien. Ahora programamos el botón aceptar de la siguiente manera:
Public Sub btnAceptar_Click() If editando Then Try hresul["nom_materia"] = txtAsignaturas.Text Try hresul.Update Else Try hconn.Exec("insert into nom_materia values(&1)", txtAsignaturas.Text) Endif Me.Close() Catch Message.Error("Imposible introducir los datos enviados") EndAhora programamos la rutina de búsqueda de asignaturas:
Public Sub btnBuscar_Click() Dim hresul As Result Dim clave As String Dim filtro As String tabla2.Clear If conectarbase() Then Return tabla2.Columns.Count = 2 tabla2.Columns[0].Text = "id" tabla2.Columns[0].Alignment = Align.Right tabla2.Columns[1].Text = "Nombre de la Asignatura o Curso" filtro = txtBuscar.Text hresul = hconn.Exec("select * from asignaturas where nom_materia like '" & filtro & "'") Do While hresul.Available clave = hresul["id"] tabla2.Add(clave, clave) tabla2[clave][1] = hresul["nom_materia"] hresul.MoveNext() Loop cerrarConexion() EndLo tendremos listo.
Para personas que han hecho alguna aplicación en Visual Basic, y tienen interés por la programación, ésta es una de las herramientas que sin lugar a dudas te va a interesar y es una clara opción que debes considerar.
Gracias a las pruebas que podemos ver en este tutorial, podemos ver que es sencillo de trabajar y realmente no toma mucho tiempo realizar alguna que otra aplicación sencilla para Linux.
Como podemos apreciar, el autocompletado que tiene gambas se restringe al objeto con el que trabajas, no como en el caso de Geany, que te puede poner cualquier cosa. Tenemos que darle puntos ya que funciona como Java y Netbeans y sin más complicaciones.
Así que para los que quieren aprender a programar sencillas aplicaciones en Linux y sienten curiosidad les recomendamos que le den una oportunidad a Gambas3.