Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-09-2005
Niko Niko is offline
No confirmado
 
Registrado: may 2003
Ubicación: Fuenlabrada - Madrid
Posts: 55
Poder: 0
Niko Va por buen camino
"Link" entre 2 BDE?

Buenas Tardes a Todos:

Intentaré explicarme lo mejor posible. Lo que estoy haciendo es un programa para hacer albaranes de entrega, entonces tengo 2 tablas paradox 7 una para guardar los datos de la factura (numero factura, nombre cliente, etc.) y otra para guardar los artículos que se entregan. Los artículos se meten en el formulario mediante un DBGrid, entonces lo que yo quiero (no se si es facil o no, lo que se es que no me sale ) es que cuando mediante un DBNavigator se seleccione el albaran deseado aparezcan tambien los artículos entregados en el DBGrid. Ahora mismo están por separado, los albaranes por un lado y los articulos por otro. Vamos creo que la palabra es hacer un LINK de una tabla a otra para que cuando se seleccione el albaran aparezcan los articulos introducidos en ese albaran.

Espero haberme explicado lo mejor posible.

Un Saludo.
Jorge.
Responder Con Cita
  #2  
Antiguo 09-09-2005
Edgar Perez Edgar Perez is offline
Registrado
 
Registrado: sep 2005
Ubicación: Los Mochis, Sinaloa, Mexico
Posts: 9
Poder: 0
Edgar Perez Va por buen camino
Respuesta...

Niko.

Lo que Tu requieres hacer es una relación Maestro-Detalle, donde los datos de la factura seran el maestro y los datos de los articulos serán los detalles, para esto debes tener por lo menos 3 tablas en juego de tal manera que:

Articulos:
-------------------
Cve │ Descripcion
-------------------
ARO1 │ Articulo uno
AR02 │ Articulo dos



Facturas:
-----------------------------
Folio │ Cliente │ Fecha
-----------------------------
F001 │ C001 │ 09-sep-2005



Detalle Facturas
---------------------------------
Factura │ ID │ ARTICULO │ CANT
---------------------------------
F001 │01 │ AR01 │ 10
F001 │02 │ AR02 │ 20


Entonces en tu programa tendras un Query conectado a la tabla de Facturas (QueryMaestro) con la siguiente sentencia SQL:

SELEC * FROM FACTURAS

Y por otra parte tendras otro Query conectado a la tabla de Detalle Facturas (QueryDetalles) con la siguiente sentencia SQL:

SELECT * FROM DETALLEFACTURAS
WHERE FACTURA = :P_FACTURA

Ahora solo falta configurar el QueryDetalles ajustando la propiedad MasterSource para hacer q apunte al QueryMaestro.

Por ultimo, en el Grid que mostraras los datos de la factura haces que apunte al QueryMaestro y en el Grid que mostraras los detalles de dicha factura haces que apunte al QueryDetalles, y para terminar el DBNavigator haces que apunte al QueryMaestro en su propiedad DataSource, de tal manera q cuando navegues en el maestro automaticamente se muestren los detalles como por arte de magia.

Bueno, espero haberte ayudado en algo.
Responder Con Cita
  #3  
Antiguo 09-09-2005
Niko Niko is offline
No confirmado
 
Registrado: may 2003
Ubicación: Fuenlabrada - Madrid
Posts: 55
Poder: 0
Niko Va por buen camino
Hola Edgar y a Todos:

Verás, mas o menos entiendo tu ejemplo, pero nunca he usado nada de SQL, llevo bastante en delphi pero todavia soy muy novato. Si no es mucho pedir, me lo podrías explicar un pelin mas claro??

Gracias de antemano.
Att. Jorge
Responder Con Cita
  #4  
Antiguo 10-09-2005
Niko Niko is offline
No confirmado
 
Registrado: may 2003
Ubicación: Fuenlabrada - Madrid
Posts: 55
Poder: 0
Niko Va por buen camino
Help!!

Hola de Nuevo

Por favor si alguien puede ayudarme con esto se lo agradecería muchisimo.

Gracias de Antemano.
Jorge.
Responder Con Cita
  #5  
Antiguo 12-09-2005
Avatar de hermes_32
hermes_32 hermes_32 is offline
Miembro
 
Registrado: jul 2003
Posts: 94
Poder: 21
hermes_32 Va por buen camino
Hola Niko,

el truco es facil. La solucion puede pasar por lo siguiente. En el adoTable "Detalle" modificas la propiedad "MasterSource" y a esta propiedad le indicas cuál es el adoTable "Maestro". Una vez que lo modifiques tienes que seleccionar qué campos son los que relacionan ambas tablas en la propiedad "MasterFields".

Con esto cada vez que uses el navigator, automaticamente se mostrará la factura junto con su detalle de artículos.

Un saludo.
__________________
Hay gente que esta demasiado educada para hablar con la boca llena pero no les importa hacerlo con la cabeza hueca.
Responder Con Cita
  #6  
Antiguo 12-09-2005
Niko Niko is offline
No confirmado
 
Registrado: may 2003
Ubicación: Fuenlabrada - Madrid
Posts: 55
Poder: 0
Niko Va por buen camino
Hola Hermes:

Con eso que me has dicho sale mas o menos bien pero luego al introducir un segundo detalle y guardar la tabla de facturas o la de detalle me sale Key Violation.

Te explico todo lo que tengo para ver si me puedes ayudar un poco mejor.

Tengo la tabla de Facturas, donde están los campos: FACTURANUM, FECHA, CLIENTENUM, RAZONSOCIALCLIENT, NIFCIFCLIENT, BRUTO, BASE, DTO, IVA, TOTAL IVA Y TOTAL FINAL. Para controlar esta tabla tengo un DBNavigator.

Y luego tengo la tabla de Detalles, donde están los campos: DETALLENUM, FACTURANO, UNDS, REFERENCIA, CONCEPTO, PRECIOUND E IMPORTE. Esta tabla también esta controlada por un DBNavigator.

He hecho lo que me has dicho, a la tabla 2 (Detalle), le he puesto en el mastersource 'DataSet1', que es el dataset de la tabla de facturas, y luego en MasterFields me sale como un dialogo donde en el listbox de la izquierda solo sale 'DETALLE' y en el de la derecha salen todos los campos de la tabla 1 (Facturas), asi que selecciono de la izquierda el unico campo que hay (detalle) y de la derecha el FACTURANUM, le doy a "Add" y a "OK".
Pero luego siempre termina saliendo KEY VIOLATION.

A ver si me puedes hechar una manilla.

Muchas Gracias.
Att. Jorge
Responder Con Cita
  #7  
Antiguo 12-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Fíjate si en el DatSet detalle aparecen los siguientes valores:

IndexFieldNames = FACTURANO
MasterFields = FACTURANUM

Si es así y aún te da el error de "Key Violation", entonces, tendrás que modificar la clave principal de la tabla de Detalles para que incluya los campos: DETALLENUM y FACTURANO

Y si aun así te falla, entonces, asegúrate de que el campo "DETALLENUM" genera un número distinto por cada línea de detalle o registro (lo mejor sería que este campo fuera de autoincremento).

Saludos!
Responder Con Cita
  #8  
Antiguo 12-09-2005
Niko Niko is offline
No confirmado
 
Registrado: may 2003
Ubicación: Fuenlabrada - Madrid
Posts: 55
Poder: 0
Niko Va por buen camino
En la tabla 2 (detalle), en MasterField aparece FACTURANUM pero en Index FieldsNames aparece DETALLENUM y si pongo FACTURANO me dice que no existe y desplegando la lista tampoco sale, solo sale detalle. El DetalleNUM tiene puesto autoincremento.

Un Saludo.
Responder Con Cita
  #9  
Antiguo 13-09-2005
Niko Niko is offline
No confirmado
 
Registrado: may 2003
Ubicación: Fuenlabrada - Madrid
Posts: 55
Poder: 0
Niko Va por buen camino
+Error

Hola de nuevo:

Lo de KEY VIOLATION ya esta solucionado, ha sido un error mio, daba error por que el campo DETALLENUM de la tabla2 (detalle) es la "llave" de la tabla y como siempre se repetía la misma (por que no se le daba un número) saltaba el KEY VIOLATION.

Pero ahora tengo un dilema, y es que he hecho todo lo que tu me has dicho.
A la tabla 2 (detalle) le he puesto en MasterSource el DataSource1 (facturas), y ahora le doy a MasterFields para seleccionar los campos con los que quiero que se relacionen las tablas, de la tabla2 (detalle) solo me sale el campo para relacionar 'DETALLENUM' y de la tabla 1 (facturas) me salen todos los campos, y así no puedo relacionar la tabla por que el número de detalle y el de la factura nunca coinciden. Necesito relacionar el nº de factura de la tabla detalles con el nº de factura de la tabla facturas.

¿Alguien tiene idea de porque no lo puedo hacer?

Agradecería muchisimo cualquier ayuda al respecto.

Salu2.
Responder Con Cita
  #10  
Antiguo 13-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Tu problema, seguramente, es que la clave principal de la tabla detalle está compuesta sólo por el campo "DETALLENUM" y, esto, es incorrecto. Necesitas que la clave principal de la tabla detalle esté formada por los campos "FACTURANO" y "DETALLENUM" (como te comenté antes). Una vez que actualices la clave principal, verás que podrás seleccionar el campo "FACTURANO" y relacionarlo con el campo "FACTURANUM" del DataSet principal.

(De todas formas, cualquier cosa vuelve a preguntar)

Saludos!

Última edición por jmariano fecha: 13-09-2005 a las 02:30:08.
Responder Con Cita
  #11  
Antiguo 13-09-2005
Niko Niko is offline
No confirmado
 
Registrado: may 2003
Ubicación: Fuenlabrada - Madrid
Posts: 55
Poder: 0
Niko Va por buen camino
Hola de nuevo:

Eso ya lo he probado, he abierto la tabla detalles para poner la "llave" también a FACTURANO y de esta manera si me sale en MasterFields y puedo linkar FACTURANUM con FACTURANO, pero la cuestion es que me dice que DETALLENUM también lo tengo que linkar con otro campo de la tabla facturas, y si hago el link con otro campo de la tabla facturas ya no me muestra los detalles de cada factura, ya que el numero de factura coincide pero el de DETALLENUM con el otro no.

Muchas Gracias por tu ayuda, espero que esta duda sea la última y asi no te molesto mas, que empiezo a ser pesado.

Salu2.
Responder Con Cita
  #12  
Antiguo 13-09-2005
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
A ver, porque creo que los dos nos estamos liando (y, creeme, la operación es supersencilla), prueba a poner lo siguiente en el DataSet detalle:

IndexFieldNames = FACTURANO;DETALLENUM
MasterFields = FACTURANUM

(Es decir, especificamos como índice los campos que forman la clave principal de la tabla detalle, y el campo al cual se ha de enlazar de la tabla principal)

Si esto te fallara (que no debería), entonces, tendrías que ver que campos forman parte de la clave principal en la tabla de facturas (que, en teoría, debería ser solo "FACTURANUM"). Si tienes más de un campo, entonces, tendrías que añadirlos a la tabla de "detalle" para poder enlazarla (de todas formas, cualquier cosa vuelve a preguntar)

Saludos!

Última edición por jmariano fecha: 13-09-2005 a las 15:59:38.
Responder Con Cita
  #13  
Antiguo 13-09-2005
Niko Niko is offline
No confirmado
 
Registrado: may 2003
Ubicación: Fuenlabrada - Madrid
Posts: 55
Poder: 0
Niko Va por buen camino
Hola de nuevo:

Creo que ya ha quedado solucionado , lo que he hecho ha sido poner en la tabla de detalles DETALLENUM y FACTURANO los dos como 'Key' y subir el FACTURANO al numero 1 en la tabla (con del database desktop ponerlo primero). Ahora si parece que funciona. Espero que no de problemas.

Muchas gracias por tus ayudas, me han servido enormemente.

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


La franja horaria es GMT +2. Ahora son las 23:24:33.


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