Nuevamente volvemos a sumar más documentación integrando el pseudo motor de Bases de Datos SQLite y un lenguaje de programación visual que día a día esta atrapando a más programadores de plataformas libres como es Gambas.
En esta oportunidad les voy a dejar el enlace de la revista digital Tuxinfo Nº12 en la cual Pablo Mileti explica en 8 páginas como acceder y realizar consultas y actualizaciones integrando esta dos herramientas SQLite y Gambas y de alguna manera podemos complementar la información con lo que Marcos hace unas semanas atrás mostraba.
Acceso a Bases de Datos SQLite desde Gambas
domingo, 14 de diciembre de 2008
Publicado por
Daniel Maldonado
en
19:25
Etiquetas: SQLite y Gambas
Integridad Referencial
La integridad referencial es una propiedad 
deseable en las bases de datos. Gracias a la integridad referencial se garantiza que una entidad (fila o registro) siempre se relaciona con otras entidades válidas, es decir, que existen en la base de datos. Implica que en todo momento dichos datos sean correctos, sin repeticiones innecesarias, datos perdidos y relaciones mal resueltas.

deseable en las bases de datos. Gracias a la integridad referencial se garantiza que una entidad (fila o registro) siempre se relaciona con otras entidades válidas, es decir, que existen en la base de datos. Implica que en todo momento dichos datos sean correctos, sin repeticiones innecesarias, datos perdidos y relaciones mal resueltas.
Como es sabido por la los desarrolladores de SQLITE , la integridad referencial no esta implementada de forma mativa pero es posible realizar la emulacion de la misma atravez de los trigger.
Extraido de la Wikipedia : www.wikipedia.org
El Siguiente Ejemplo fue extradido de la wiki del "El Server" - http://www.elserver.com/wiki/Extraido de la Wikipedia : www.wikipedia.org
=========================================================
La tabla PELICULAS tiene dependencia de otras dos: GENERO y SOPORTE.
Los triggers antes de insert y antes de update on Peliculas tienen en cuenta estas dos dependencias.
Para antes de delete hacen falta dos triggers: uno en Genero y otro en Soporte.
Estos triggers impiden que se pueda borrar un genero o un soporte, si hay peliculas que lo están
usando.
El código deja claro lo que se haría si la dependencia fuera de más tablas,sólo habría que añadir más OR y los triggers on delete.
Si la dependencia fuera solo de una tabla,se quitaría un OR y el delete que sobre.
CREATE TABLE [genero] (
[id_gen] INTEGER PRIMARY KEY NOT NULL,
[nombreGen] VARCHAR(40) UNIQUE NOT NULL
);
CREATE TABLE [soporte] (
[id_sop] INTEGER NOT NULL PRIMARY KEY,
[nombreSop] VARCHAR(20) UNIQUE NOT NULL
);
CREATE TABLE [peliculas] (
[id_pel] INTEGER NOT NULL PRIMARY KEY,
[id_genero] INTEGER NOT NULL,
[id_soporte] INTEGER NOT NULL,
[nombrePel] VARCHAR(40) NOT NULL
);
CREATE TRIGGER film_pel_in before insert on peliculas
for each row
begin
select case
when
(
(new.id_soporte is not null)
and
(new.id_genero is not null)
and
(
((select id_sop from soporte where
id_sop =new.id_soporte) is null)
or
((select id_gen from genero where
id_gen = new.id_genero) is null)
)
)
then raise(abort,'violacion integridad')
end;
end;
CREATE TRIGGER film_pel_up before update on peliculas
for each row begin
select case
when
(
((select id_sop from soporte where
id_sop = new.id_soporte) is null)
or
((select id_gen from genero where
id_gen = new.id_genero) is null)
)
then raise(abort,'violacion integridad')
end;
end;
CREATE TRIGGER film_sop_de before delete on soporte
for each row begin
select case
when
((select id_soporte from peliculas
where id_soporte = old.id_sop) is not null)
then raise(abort,'violacion integridad')
end;
end;
CREATE TRIGGER film_gen_de before delete on genero
for each row begin
select case
when
((select id_genero from peliculas
where id_genero = old.id_gen) is not null)
then raise(abort,'violacion integridad')
end;
end;
Publicado por
Gerard
en
17:57
Etiquetas: Practica y Ejemplos
Pequeña Consulta en SQLite3 utilizando el lenguaje C
lunes, 1 de diciembre de 2008
Hace algunas semanas hemos recivido , de parte de uno de los desarrolladores "Ricardo D. Quiroga" de la comunidad un ejemplo de como implementar SQLite en el Languaje C. A Quien Agradesemos el Envio de este miniComo..
Basado en el ejemplo posteado en http://www.sqlite.org/quickstart.html
Autor: Ricardo D. Quiroga -> l2radamanthys@gmail.com
El codigo fuente posteado aqui esta bajo licencia GPL2 (license.txt)
Codigo fuente Probado usando el Dev-C++ y el Compilador GCC
#include
El autor no se hace responsable del daño que el mismo pudiese causar directa o indirectamente a tu computadora ,novia,, perro, Y/O SUEGRA ,ect. use el mismo bajo su propia responsabilidad.
Se Incluyen los siguientes archivos:
* libreria sqlite
- sqlite3.h
- libsqlite3.a
- sqlite3.dll
* codigo fuente
- main.c (Codigo fuente)
- main.c.html (vercion del codigo fuente para visualizar como html)
- test1.dev (archivo de proyecto (solo para Dev-C++) )
Aunque fue el Codigo fue probado con el Dev-C++ usando el GCC el mismo tambien deveria poderse compilar usando cualquier otro ya que el mismo solo fue escrito en ANSI C
Sobre la BD:
Crear una BD con el nombre 'test.db'(o cambiar el nombre de la bd en el codigo fuente) a la cual luego se le agregara una tabla llamarla 'table1' y colocarle los camposo que ud eligan
Que hace el programa:
Conecxta una base de datos a SQLite realiza una pequeña consulta con SQLite en este ejemplo la consulta es la siguiente "select * from table1;" muestra los resultados en pantalla y cierra la bd.
/*****************************************************************************************
------ Una Simple consulta en SQLITE Usando C ------
Probado con el Dev-C++ Usando el GCC
Por Ricardo D. Quiroga - l2radamanthys@gmail.com
Este ejemplo esta basado en el codigo posteado en http://www.sqlite.org/quickstart.html
Quitando los Comentarios son como 25 lineas
*****************************************************************************************/
#include
#include
#include //libreria para trabajar con SQLite3
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
for( int i=0; i
printf("%s ", argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char **argv) {
sqlite3 *db; //variable que hara referencia a la Base de Datos que utilzaremos
char *zErrMsg; //string que almacenara el mensaje de error
int rc; //amacenara el resultado del llamado de las funciones de sqlite3.h
/*****************************************************************************************
Abrimos la base de Datos en nuestro caso la BD se llamara 'test.db'
int sqlite3_open(
const char *filename, Nombre de la Base de Datos (UTF-8)
sqlite3 **ppDb Salida SQLite db handle
);
En caso de error la funcion sqlite3_open() devolvera un valor distinto de 0
*****************************************************************************************/
rc = sqlite3_open("test.db", &db);
/*****************************************************************************************
Mostramos el mensaje de error en caso de que no se pudiera abrir la Base de Datos
*****************************************************************************************/
if (rc) {
fprintf(stderr, "No se pudo Abrir la base de Datos: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
/*****************************************************************************************
Strings que alamcenaran las consulta que relizamos en la que Copiaremos la instrucion de
SQLite que queremos ejecutar en la variable 'instrucion' en este caso una simple consulta
a la Base de Datos
*****************************************************************************************/
char instrucion[1024]="";
sprintf(instrucion, "SELECT * FROM table1;");
/*****************************************************************************************
Ejecutamos la instrucion alamcenada en el string instrucion en SQLite3
Esplicacion mas a fondo de la funcion 'sqlite3_exec()'
int sqlite3_exec(
sqlite3*, Base de Datos Abierta
const char *sql, Instrucion de SQl a evaluar
int (*callback)(void*,int,char**,char**), funcion (Callback) ver arrina
void *, 1er agumento de la funcion Callback
char **errmsg variable de mensaje de error (1)
);
si ocurrio un error durante la ejecucion de la instrucion la la funcion devolvera un valor
diferente de la constante SQLITE_OK y el tipo de error sera devuelto en la variable errmsg(1)
*****************************************************************************************/
rc = sqlite3_exec(db, instrucion, callback, 0, &zErrMsg);
/*****************************************************************************************
En caso que ocurriera un error en la ejecucion de la instrucion SQL mostramos el mismo
*****************************************************************************************/
if ( rc!=SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
}
/*****************************************************************************************
funcion para cerrar la Base de Datos ( Sin comentarios....)
*****************************************************************************************/
sqlite3_close(db);
printf("\n");
system("PAUSE"); //pausamos la ejecucion del programa par aque no se cierre la consola
return EXIT_SUCCESS;
} //fin del programa.....
Este programa fue desarrollado como ejemplo de uso de SQLite para SQLite-Latinoamerica
Ricardo D. Quiroga
Publicado por
Gerard
en
5:05
Etiquetas: SQLite y C
Suscribirse a:
Entradas (Atom)