Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Relación m a n en un grid (https://www.clubdelphi.com/foros/showthread.php?t=27669)

jfgaliano 28-11-2005 11:39:48

Relación m a n en un grid
 
Saludos, en la base de datos tengo una relacion M a N y la he anulado con una tabla intermedia que tiene las claves de las dos tablas. Hasta ahí lo normal. Agradecería saber cómo mostrar un grid en la aplicación para poder insertar datos en esa tabla, para crear las relaciones. muchas gracias

Casimiro Notevi 28-11-2005 12:16:14

Mira la guía de estilo

jfgaliano 28-11-2005 12:44:30

Perdon por lo del estilo. La base de datos es Interbase y trabajo con IBobject.Gracias

Casimiro Notevi 28-11-2005 13:59:55

¿Y cómo son esas relaciones, tablas, campos, etc.? Lo podemos suponer, pero mejor que lo expliques en detalle.

Gracias ;)

jfgaliano 28-11-2005 14:19:56

Muchas gracias. Pues tengo una tabla de persona y otra de titulación. Como una persona puede tener varias titulaciones,pues es creado otra tabla con las claves de ambas para deshacer la relación de MxN. Por tanto, al estar introduciendo los datos de la persona, me gustaría tener un grid u otra cosa en la que puede asignar a esa persona una o varias titulaciones, pero no sé muy bien como hacer esto. Un saludo

Casimiro Notevi 28-11-2005 15:02:05

Creo entender que tienes algo así:
Código:

PERSONAS
 CODIGO        NOMBRE
 ----------------------
 1                PEPE
 2                MANOLO
 
 
 TITULACION
 ----------------------
 CODIGO        TITULO
 1                MECANICO
 2                ELECTRICISTA
 1                PINTOR
 1                FONTANERO
 2                CRISTALERO
 1                ELECTRICISTA

¿y la otra tabla cómo sería y para qué?, esa parte no la he entendido.

jfgaliano 28-11-2005 17:22:07

Ante todo,gracias por la paciencia. La otra tabla sería

tabla :PERSONA_TITULACION

CODIGO_PERSONA CODIGO_TITULACIÓN
----------------------------------------
1 1
1 2
2 1

Se hace para asingarle a una persona una o varias titulaciones. Se obtiene al normalizar la relación m,n

vtdeleon 28-11-2005 17:42:40

Saludos
Antes que todo, decirte que puedes utilizar lasEtiquetas vB . La puedes usar, Son gratis:p

Volviendo a tu caso y haciendo un peque~ito arreglo al ejemplo de casimiro:D
Código:

PERSONAS
 CODIGO        NOMBRE
 ----------------------
 1        PEPE
 2        MANOLO
 
 
 TITULACION
 ----------------------
 CODIGO        TITULO
 1        MECANICO
 2        ELECTRICISTA
 3        PINTOR
 4        FONTANERO
 5        CRISTALERO
 6        ELECTRICISTA

Y una 3ra
PERSONA_TITULACION

CODIGOPERSONA CODIGOTITULO
----------------------------------------
1                1
1                2
2                1

La consulta seria
Código SQL [-]
select personas.codigo, personas.nombre, titulos.nombre
from personatitulo
inner join personas on personas.codigo=personatitulo.codigopersona
inner join titulos on titulos.codigo=personatitulo.codigotitulo

jfgaliano 29-11-2005 10:32:25

Gracias.Esto era lo que quería, pero para insertar estos datos en un grid o algo por el estilo, de manera que cuando esté metiendo los datos de una persona, pues para este campo, me de la opción a seleccionar uno o varios. La duda es de como se hace eso en Delphi. Gracias

Ivanzinho 29-11-2005 10:55:06

Mira el tema 15 del libro la cara oculta de Delphi4 que puedes descargar aquí

ronalg 29-11-2005 17:12:48

La relaciones MxN o muchos a muchos no son muy problematicas
 
Todo el tiempo aparecen este tipo de relaciones entre tablas, a mi en lo personal me agradan porque tienen al menos dos posibilidades básicas de trabajar, dejame ver:
Tienes dos tablas y una tercera de enlace con refencia o foreign key a las otras, entonces:

tb_personas maestra - tb_personal_titulos Detalle

Código SQL [-]
create table tb_pesonas(
cod integer not null primary key,
nombres varchar(50),
ap_paterno varchar(30),
     .
     .
     .
)

create table tb_titulos(
cod integer not null primary key,
titulo varchar(30) not null
     .
     .
     .
)

create table tb_personas_titulos(
cod integer not null primary key,
ref_persona integer not null,
ref_titulo integer not null,
foreign key (ref_persona) references tb_personas(cod)
on delete no action on update cascade,
foreign key (ref_titulo) references tb_titulos(cod)
on delete no action on update cascade
     .
     .
     .
)

haría algo asi, un formulario dos grillas(una personas y otra titulos asignados), eso implica dos Tdataset (Ttable por ahora) y dos Tdata Source y un tQuery haciendo:

Código SQL [-]
select cod, titulo
from tb_titulos

1er dataset conectado a la tb_personas
2do dataset conectado a la tb_personas_titulos
2do dataset creo un campo lookup que apunte ref_titulo a titulo en el Tquery
en el primer tdataset en master source colocas datasouce1 y en master field el campo ref_persona.
y eso es todo


La franja horaria es GMT +2. Ahora son las 00:56:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi