Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 14-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
En primer lugar y con ánimo de que cambies los nombres, yo usaría nombres de tablas más intuitivos, por ejemplo:

tabla: Factura (encabezados y demás)
tabla: Lineas (los apuntes de cada venta)

Siguiendo esta nomenclatura, lo que tienes que hacer es:

Tabla Factura:
Campo Nro_Factura (el autoincremento)
En el OnNewRecord, no tienes que hacer nada. Como es un autoincremento se hace solo .

Tabla Lineas:
Tienes que añadir un campo (Foreign Key) numérico, donde guardarás el nro_Factura, lo llamo Fnro_Factura, (la F de Foreing Key, clave ajena o clave foránea, como quieras llamarlo..

Tienes que asegurarte que al dar de alta un registro en Lineas, ya haya uno definido de Factura. Como vamos a realizar un Maestro-Detalle, siempre ha de existir el registro de Facturas antes que el de Lineas.

Para relacionar en delphi estas dos tablas, vas al objeto tblLineas (tabla Lineas), y en MasterSource, eliges el tblFacturas (obviamente la tabla Facturas, o su DataSource correspondiente).

Espera que estoy abriendo el delphi . En tblLineas.MasterField haz clic en los 3 puntos, ahí se donde relacionas las dos tablas.

En la ventana que se abre, en MasterField, aparecen los campos de la tabla Factura, haz clic sobre nro_Factura.

En Detaild Field, elige Fnro_Factura (campo nuevo creado) y pulsa el boton Add.

Listo. Ya tienes las dos tablas relacionadas, cuando cambies de registro en la tabla Facturas, el grid que está relacionado con tblLineas, solo mostrará los apuntes de ventas de esa Factura.


Lo que hablaba de asegurarte de que exista un registro de Factura antes que las lineas, es muy facil. Por ejemplo:

En el BeforeInsert de la tabla lineas:
Código Delphi [-]
if tblFacturas.Fieldbyname(nro_factura).IsNull then
 tblfacturas.Append;
 tblfacturas.Post;
Si en una factura en blanco (por ejemplo la primera factura que se va a crear en el programa) el usuario, que es muy listo, y está esperando que falle tu programa para echarte la bulla, el tio listo se va directamente al grid de Lineas e intenta añadir un artículo, como todavía el nº de factura no se ha creado, el nro_factura es nulo, así que añade una nueva factura y se graba, desde este punto, ya existe el nro_factura para guardarlo en la tabla Lineas.

Advertencia: Primero se debe guardar la tabla Facturas (el Maestro) y despues las Lineas (el detalle) y siempre en ese orden.

En el BeforePost de Lineas añades:
Código Delphi [-]
  tblLineas.Fieldbyname('Fnro_factura').AsInteger := 
                     tblFacturas.Fieldbyname('nro_Factura').AsInteger;

Cierro el delphi . Chaus
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 14:36:16.


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