Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Este Articulo lo copio de mi blog anterior, espero poder continuar una serie de tutoriales de Gambas, claro, todo
dependerá de sus comentarios
A pesar de lo que me gusta desarrollar con Gambas y el tiempo que llevo haciéndolo, nunca he publicado un
artículo, tutorial o lo que sea sobre este maravilloso entorno de programación, así que comenzaré por algo
sencillo para ir poco a poco profundizando sobre este tema, bases de datos con Gambas .
Antes que nada es necesario activar el componente de Bases de datos (gb.db) en la pestaña componentes de
la ventana propiedades en el menú Proyecto, luego podemos usar un código como este:
En la primera línea declaramos una variable de tipo Connection yo la hice pública que pueda ser usada en otros
módulos del proyecto en dado caso
En el procedimiento Main creamos primero el objeto y luego colocaremos algunos datos necesarios para iniciar
la conexión, cabe destacar que estos datos son los unicos que deben modificarse, por ejemplo, el codigo
anterior funcionará tanto para mysql, si quieres conectarte usando SQLite solo tendrías que colocar la ruta de la
base de datos en la propiedad Host e ignorar las propiedades Login y Password, para conectar con ODBC es
relativamente mas complicado, aquí les dejo Un Link con un tutorial al respecto.
La propiedad Name indica el nombre de la base de datos a la que nos queremos conectar, pero es posible que
esa base de datos aún no exista, en ese caso nos daria el siguiente error:
Podemos modificar el código para crear la base de datos en caso de que esta no exista, por ejemplo:
HConn.Close
HConn.Name = "basedatos"
Hconn.Open
END
Podemos ver varios cambios, en primer lugar vemos que ya no nombramos la base de datos antes de abrir la
conexión, primero verificamos con esta linea:
IF NOT HConn.Databases.Exist("basedatos") THEN
Luego que ya tengamos la base de datos creada debemos cerrar la conexión para nombrar la base de datos
como parametro:
HConn.Close
HConn.Name = "basedatos"
Hconn.Open
Ya con esto nos evitamos la posibilidad de que ocurra un error al no existir la base de datos, claro que una base
de datos contiene tablas y campos que también pueden crearse desde el código.
Ahora que ya sabemos como crear una base de datos y conectarnos a ella, procederemos a crear tablas y sus
respectivos campos en esa base de datos.
DIM hTabla as Table
hTabla = $hConn.Tables.Add("tabla")
hTabla.Fields.Add("id", db.Serial)
hTabla.Fields.Add("campo1", gb.String, 16, "Sin Nombre")
hTabla.Fields.Add("campo2", db.Integer,, 1)
hTabla.Fields.Add("campo3", gb.Date)
hTabla.Fields.Add("campo3", gb.Boolean)
hTabla.Fields.Add("campo4", gb.Float)
hTabla.PrimaryKey = ["id"]
hTabla.Update
El segundo parametro es el tipo de dato que va a guardarse allí, los tipos disponibles son:
db.Blob = -2
db.Serial = -1
db.Boolean = 1
db.Integer = 4
db.Long = 5
db.Float = 7
db.Date = 8
db.String = 9
Asumo que los nombres de las constantes definen por si mismas por eso no las explico, a excepción de
db.Serial, esta constante define el tipo de datos auto_increment.
Luego está el tamaño del campo, y el valor por defecto, eso tampoco necesita mucha explicación.
Cuando ya tenemos todos los campos creados establecemos (en este caso) el campo “id” como clave primaria,
se darán cuenta en la linea
hTabla.PrimaryKey = ["id"]
Vemos que “id” está entre corchetes, esto es porque la variable PrimaryKey es una String Array por lo que
podemos agregar más de una clave primaria.
Al final actualizamos la tabla y listo, ya tenemos una tabla con sus campos.
Transacciones
Cuando Hablamos de una transacción en una base de datos nos referimos a una serie de cambios que, o todas
tienen exito o todas fracasan, por ejemplo, si estamos intentando cambiar un registro, pero en alguno no
coindiden los tipos, entonces todo el proceso se tiene que revertir y no se guarda nada.
Crear Registros
Lo primero que hacemos es iniciar la transacción con
$hConn.Begin
Esto nos crea un registro vacio donde vamos a establecer los datos del registro:
hRes!campo1 = "Registro #1"
hRes!campo2 = 300
hRes!campo3 = Date(Now())
hRes!campo4 = TRUE
hRes!campo5 = 2235644.232
El objeto Result también puede usarse como un Array para guardar los datos, sería algo como esto:
hRes["campo1"] = "Registro #1"
hRes["campo2"] = Rnd(200, 20000)
hRes["campo3"] = Date(Now())
hRes["campo4"] = TRUE
hRes["campo5"] = 2235644.232
Una ventaja al hacerlo de esta manera es que podemos por ejemplo usar variables en lugar de cadenas,
pudiendo potimizar mas el código, la opciones son variadas.
Luego se actualiza el registro, para guardar estos datos:
hRes.Update
Con esto nos aseguramos de que ingresen los datos al registro, finalmente cerramos la transacción:
$hConn.Commit
$hConn.Begin
hRes = $hConn.Create("tabla")
hRes.Update
$hConn.Commit
CATCH
$hConn.Rollback
Buscar Registros
Para buscar un registro podemos usar el método Find del objeto Collection:
hRes = $hconn.Find("tabla") ' Esto es equivalente a SELECT * FROM tabla
Esto crea un objeto Result de solo lectura que nos guardará, en este caso buscamos todos los datos que están
guardados en la tabla, podemos filtrar con la clausula where de esta manera:
hRes = $hconn.Find("tabla", "campo2 < 10000") ' Esto es equivalente a SELECT * FROM tabla WHERE
campo2 < 10000
Con esta tendremos como resultado todos los registros cuyo valor para campo2 sea menor a 10000.
$hconn.Begin
hRes = $hconn.Edit("tabla", "campo2 < 10000")
CATCH
$hconn.Rollback
El método Exec
Si alguno de métodos anteriores se queda corto siempre podemos crear nuestras propias sentencias SQL
usando el el metodo Exec
hRes = hConn.Exec("Tu sentencia SQL")
Este método siempre va a devolver un objeto Result aunque no será necesario en todos los casos.
El DATAVIEW únicamente muestra los datos, pero quien obtiene esos datos es un DATASOURCE que en
gambas es un objeto contenedor. Se requiere además una conexión activa a una base de datos.
Así pues, si en un formulario queremos usar un objeto DATAVIEW deberemos crear un conectar primero un
objeto connection activo
Código:
Dim Cn as connection
Cn=new connection
Cn.type="mysql"
Cn.host="localhost"
Cn.Port="3306"
Cn.login="usrlibreria"
Cn.password="clave_usr"
Cn.name="LIBRERIA"
try Cn.open() 'abrir la conexión
Situar el objeto con tenedor DATASOURCE en el formulario y poner las propiedades mínimas para obtener la
funcionalidad
Código:
Datasource.table="autores" tabla o vista de donde saldrán los datos
Datasource.filter=" la condición que iría tras un where en una claúsula select"
Datasource.readonly=true o false
Situar el objeto DATAVIEW dentro del con tenedor DATASOURCE y poner las
propiedádes mínimas para obtener la funcionalidad
En Columns indicar el orden de campos de tabla que aparecerán en el DATAVIEW
Como añadido (por habitual) aunque no necesario conviene comprobar las propiedades
Código:
dataview.grid=true/false si se va a mostrar rejilla o no
dataview.mode=none/single si se va a seleccionar la fila elegida o no.
Definir las cabecera s y el a n ch o de columnas
Código:
with dataview.gridview
.columns[0].text="Código"
.columns[0].width=50
.columns[1].text="Autor"
.columns[1].width=20
end with
‘modulo Voces
PUBLIC FUNCTION Bienvenido(OPTIONAL TextBox AS String)
EXEC ["aoss", "espeak", "-ves", "-s145", TextBox]
END
en FMain
PUBLIC SUB Button1_Click()
Voces.Bienvenido(txtnombre.Text)
END