Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-06-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
maestro/detalle con temporales

Hola amigos,

Tengo una relación maestro/detalle que funciona bien salvo a la hora de insertar nuevos registros.

La pregunta es si al insertar un nuevo registro en la tabla maestra y que no existe en la detalle hasta que complete el registro, para evitar errores si es perfectamente valido usar una tabla temporal para la de detalle y despues pasar esos registros.

O de que otra forma se podría hacer.

tablas:

maestra

facturas
--------
numfactura
coddetalle
...

lineasfactura
------------
numfactura
lineasdetalle

gracias
Responder Con Cita
  #2  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Depende cómo tengas hecho ese maestro/detalle.
Si es un select del detalle mediante el un campo del maestro, entonces simplemente no aparecerá nada en el detalle (obviamente), por lo que no hay nada que hacer, todo perfecto.

EDITO: creo que dices que das de alta el maestro cuando has dado de alta algo en el detalle. No es un buen método, debes dar de alta primero el maestro, sería lo idóneo.
Responder Con Cita
  #3  
Antiguo 08-06-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Gracias por responder casimiro .

Como estoy haciendo una prueba, tengo todas las relaciones asignadas en el inspector de objetos, y para ver si funciona (uso sqlite), desde un sqlite manager "meti" los datos a mano, esto es, 2 numeros de factura en el maestro y varios registros en el detalle asignando amano el numero de factura

tablas:

maestra

facturas
--------
numfactura
coddetalle
...

lineasfactura
------------
numfactura
lineasdetalle

ya en el programa usando un dbgrid, al insertar un nuevo registro, debido a la relacion que ya tiene maestro/detalle, me aparecen los detalles
Responder Con Cita
  #4  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Quieres decir entonces que funciona bien, no?
Responder Con Cita
  #5  
Antiguo 08-06-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
funciona bien sino añado nada, solo consultas.

Lo que queria es añadir registros al maestro y al detalle, pero en detalle, el codigo de la factura todavia no existe porque no se dio de alta primero.

La pregunta es si para el detalle puedo hacer una tabla temporal para despues pasarla ya con todo, o no es una forma normal de hacerlo?.
O como lo haces tu.

gracias
Responder Con Cita
  #6  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Primero se da de alta el "maestro" y luego los "detalles", no puede ser de otra forma sin son tablas relacionadas.
En todo caso, si termina sin dar de alta ningún "detalle", puedes borrar el "maestro", si quieres.
Realmente no se puede dar muchos consejos de un sistema que no se tiene ni idea de lo que hace, ni cómo lo hace, ni lo que quieres hacer en cuanto a su funcionamiento se refiere
Responder Con Cita
  #7  
Antiguo 08-06-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
gracias.
El sistema es simplemente dar de alta una factura por numero de factura, y luego en otra tabla las lineas que contiene esa factura con su precio y demas.

Digo yo que es una relacion maestro/detalle normal y si funciona mi problema era, como a cualquiera, el insertar nuevos registros en el maestro y el detalle.

Tal y como lo planteas, si es así como debe ser no tengo por que usar una tabla temporal.

Estoy en lo correcto a la hora de trabajar con maestro/detalle?.

Documentacion de maestro/detalle sobre relacion si hay, inclusive en este foro, pero de insertar nuevos registros no he conseguido nada.

Gracias amigo casimiro por arrojarme luz.
Responder Con Cita
  #8  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Una relación maestro->detalle es una relación "uno a muchos". Lo normal es tener un campo por el que están relacionadas ambas tablas.
En el caso de facturas es aconsejable que sea por un campo código que no sea el número de la factura, ¿por qué?, son varios motivos, pero por si se borra una factura, por ejemplo, así no perderíamos el incremento que debe existir entre ellas, las facturas.

Código SQL [-]
tbCabecerasFacturas ( 
  id integer, 
  numero integer,
  fecha date,
  cliente integer,
  total numeric(15,4),
  primary key (id)
)

tbLineasFacturas (
  id integer,
  id_cabecera integer, 
  codigoArticulo integer,
  cantidad integer,
  precio numeric(15,4),
  primary key (id),
  foreign key (id_cabecera) references tbCabecerasFacturas (id)
)

Básicamente, a grandes rasgos:
Los campos id son autoincrementales.
Cada vez que creamos una factura podemos buscar la última y aumentar en 1 su número. Si se cancela, borra, etc. no habría problema con saltos de números.
Y como ves, se llaman tablas relacionales porque están relacionadas, es imposible dar de alta un registro en tbLineasFacturas si no existe su correspondiente 'id' en la tabla tbCabecerasFacturas

Yo uso 2 querys, uno para la cabecera y otro para el detalle. Si se cambia la cabecera entonces busco los registros en el detalle con el 'id' de la cabecera, simplemente.
Responder Con Cita
  #9  
Antiguo 08-06-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
Se agradece de veras la informacion.

Si me quedo claro la relacion y si me funcionaba con la sconsultas, me quedaba el insertar registros pero lo voy a hacer registrando primero el maestro y luego el detalle.

gracias voy a probarlo y os cuento
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Saber si el DBGrid (Detalle) esta Vacio en Relacion Maestro/Detalle Adrian Murua Conexión con bases de datos 2 03-01-2009 13:48:46
Maestro/Detalle (No graba en tabla Maestro) teclilla Tablas planas 12 21-04-2008 20:59:54
Problema tabla Maestro-detalle en la q la pk de t.detalle formad por 2cods de la maes akinom38 Varios 1 09-11-2007 19:27:44
Respecto a la relacion maestro detalle detalle ilichhernandez Conexión con bases de datos 0 15-05-2007 18:13:54
Maestro-Detalle ;Actualizar detalle a partir de un DBgrid norberto_larios Conexión con bases de datos 1 11-09-2004 18:17:34


La franja horaria es GMT +2. Ahora son las 03:37:03.


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
Copyright 1996-2007 Club Delphi