https://foro.gambas-es.org/viewtopic.php?f=1&t=810
-----------------------------------
jousseph
Miercoles, 28 Julio 2010, 16:25

Como Hago Para Relacionar Tablas Sqlite
-----------------------------------
Hola compañeros no entiendo muy bien el codigo de relacionar una tabla con la otra en sqlite veo que usa una sentencia llamada"TRIGGERS" y la verdad no he podido orientarme por favor les pido alguien quien lo ha podido hacer en gambas gracias.


-----------------------------------
shordi
Miercoles, 28 Julio 2010, 16:41

Re: Como Hago Para Relacionar Tablas Sqlite
-----------------------------------
Compañero: 
Eso de Cómo hago esto y cómo hago lo otro está muy bien, pero no es serio.
Plantea cada pregunta diciendo algo así: 
"Quiero hacer esto y lo otro y he buscado en este sitio y en este libro y he intentado esto y lo de más allá. Como no me funciona, me gustaría saber qué hago mal y aquí tenéis el código que he intentado para que lo reviséis".

Con una pregunta así encontrarás ayuda, seguro. Pero ya sabes que hay muchas formas de hacer una misma cosa y "Cómo hago para..." tiene tantas respuestas como programadores.

Además, preguntando así no aportas tú nada a los demás que, quien más y quien menos, tampoco tenemos tanto tiempo que perder.

Saludos.


-----------------------------------
jousseph
Miercoles, 28 Julio 2010, 17:05

Re: Como Hago Para Relacionar Tablas Sqlite
-----------------------------------
Bueno el hecho es que parece mas la soluciones que he dado que las que me han solucionado al preguntar aqui en este foro, voy a ser mas claro creo que en mi sistema he solucionado 51 formularios con sentencias observando por todo internet, pero bueno no vayamos a caer en polemicas esta es una de las paginas que encuentro con sentencias del tipo sqlite: pagina web http://www.elserver.com/wiki/SQLite_relacionar_tablas_con_triggers


LegalesLegales
SQLite relacionar tablas con triggers

    * Artículo
    * Discusión
    * Editar
    * Historial


SQLITE NO IMPLEMENTA NATIVAMENTE INTEGRIDAD RELACIONAL PERO PUEDE LOGRARSE DEFINIENDO TRIGGERS, EN INSERCIÓN, ACTUALIZACIÓN Y BORRADO. VEAMOS UN EJEMPLO CON VARIAS TABLAS

=========================================================
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.

[editar] ==============================================

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;

Ojala en vez de criticar  :mrorange: aporten algo como los otros compañeros y no recibir tortazos sin diplomacia alguna, esto siempre me pasa cuando consigo algo lo coloco aqui al tiempo, cuando ya lo he solucionado para que otros al menos lo relacionen y les sirva de algo gracias :grin:


-----------------------------------
jguardon
Miercoles, 28 Julio 2010, 19:51

Re: Como Hago Para Relacionar Tablas Sqlite
-----------------------------------
@jousseph

No creo que debas enfadarte porque alguien te indique el camino correcto para que tu petición de ayuda sea lo más correcta posible y recibas respuesta en el menor tiempo posible.

Aquí, como en cualquier otro foro hay unas normas que deberíamos de seguir, aunque reconozco que los administradores de este foro no somos demasiado estrictos en hacerlas cumplir. Si lo fuéramos, te aseguro que más de uno ya se habría marchado, sólo por decirle cómo debe de hacer las cosas dentro del foro, y no queremos que eso pase.

Lo que sí es verdad, es que tampoco queremos que sea la tónica general soltar preguntas al "tun-tun" sin apreciar un cierto trabajo previo por parte de la persona que realiza la consulta. Si llegáramos a ese punto, entonces sería necesario aplicar las normas mucho más taxativamente.

Te recomiendo la lectura del texto [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html] "Cómo hacer preguntas inteligentes", no tiene desperdicio y comprenderás muchas cosas de las que se han comentado por aquí.

Por otra parte, es de agradecer que al tiempo que encontraste la respuesta, tú mismo la hayas publicado. En eso consiste el espíritu de un programador o [i]hacker[/i] (como se nos denomina en el escrito citado anteriormente).

Por ello te doy las gracias y espero que comprendas la postura de muchos de los integrantes de esta Comunidad.

Saludos


