Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2006
Avatar de TrUnkS
TrUnkS TrUnkS is offline
Miembro
 
Registrado: dic 2005
Posts: 93
Poder: 19
TrUnkS Va por buen camino
Question Problema con consulta en Maestro-Detalle

Hola. Tengo un sistema de facturación. Tengo 3 tablas: CLIENTES, FACTURAS, DETALLES en Paradox. Tengo relacionadas las tablas de modo que un Cliente puede tener muchas Facturas y cada factura puede tener muchos Detalles ( de productos). Tengo un Form con DBEdits para las claves primarias de las tablas. Quisiera navegar por los registros de la tabla FACTURAS de modo que al desplazarme por la tabla me muestre en el Form el cliente que la tiene y el respectivo detalle de productos que adquirio. La relacion Maestro-Detalle es CLIENTES->FACTURAS->DETALLES. Para la consulta SQL tengo un Query que no he podido configurar correctamente, solo me puedo desplazar por la tabla CLIENTES ya que es la tabla Maestra de mas alto rango. El problema se radica en que no puedo desplazarme por la tabla FACTURAS para rescatar la clave secundaria correspondiente a la clave primaria de CLIENTES para asi poder hacer la consulta con ese valor y pasarlo como parámetro en el Query. Me gustaria que alguien me dijera si cometi algún error o me faltan cosas por declarar

Propiedades del Query:

- DataBaseName: El alias correspondiente
- DataSource:TClientes

Código SQL [-]
SELECT *FROM CLIENTES WHERE CLI_ID=:CLIENTE_ID

Código Delphi [-]
procedure TForm.BitBtn1Click(Sender: TObject);
var CLAVE_CLIENTE,CLAVE_FACTURA:String;
begin
 CLAVE_FACTURA:=FloatToStr(StrToFloat(TFacturas.FieldByName('FAC_ID').AsString) + 1); // corresponde al registro siguiente
 TFacturas.FindKey([CLAVE_FACTURA]); // supuestamente se esta posicionando en el registro siguiente de la tabla FACTURAS
 CLAVE_CLIENTE:=TFacturas.FieldByName('FAC_CLI_ID').AsString; // clave secundaria de FACTURAS que correspondiente a la clave de CLIENTES
 Query.Clear;
 Query.ParamByName('CLIENTE_ID').AsString := CLAVE_CLIENTE; 
 Query.Active:=True;
 Query.Open;

Última edición por TrUnkS fecha: 10-10-2006 a las 07:55:02.
Responder Con Cita
  #2  
Antiguo 10-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Creo que no lo acabo de entender.

Si estas creando la ventana de Facturas, solamente es una Relación Maestro-Detalle (Facturas- Productos). En esa ventana colocas un DBLookUpComboBox con las siguientes propiedades:

DataSource:= Tblfactura
Field := FAC_CLI_ID;

ListSource:= TblClientes
keyField := CLIENTE_ID; // CAMPO DE LA TABLA CLIENTES:
DisplayFields := Nombre_cli; // campo que contiene el nombre
//del cliente de la tabla Clientes.

Puesto que me quedan dudas, quizás esto tambien te sirva:

Si en realidad necesitas esa "doble relación maestro-detalle" CLIENTES-> FACTURAS y FACTURAS->PRODUCTOS puedes hacerlo mediante consultas. La filosofía es:
Tienes 3 Grids, uno con los clientes que tienen facturas, al seleccionar uno, te aparecen todas las facturas que tiene ese cliente en otro Grid, al seleccionar una Factura, se muestran todos los productos de esa Factura.

qryClientes:
Código SQL [-]
select distinct fac_cli_id from facturas

qryFacturas
Código SQL [-]

  select * from facturas where FAC_CLI_ID = :FAC_CLI_ID

qryDetalles:
Código SQL [-]
select * from detalle where detalle.Fac_id = :FAC_ID

Ahora ponemos un TDatasource asociados a cada consulta, sus nombres serán DTSclientes, DTSfacturas, DTSdetalles.

Selecciona la qryDetalles y en su propiedad MasterSource asigna DTSFacturas
Selecciona la qryFacturas y en su propiedad MasterSource asigna DTSClientes

por supuesto puedes poner 3 DBNavigator asociados a cada consulta.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 11-10-2006
Avatar de TrUnkS
TrUnkS TrUnkS is offline
Miembro
 
Registrado: dic 2005
Posts: 93
Poder: 19
TrUnkS Va por buen camino
Hola y gracias por responder. Mi problema ya lo solucione aprovechando tu ayuda gracias . El problema radicaba en que al ir navegando por los registros de la tabla FACTURAS debia indicarme la clave de CLIENTES y ademas poner en un DBGrid los productos o detalles. Pero como tenia hecha la relacion Maestro-Detalle no podia sino navegar por los registros de la tabla CLIENTES para que me vaya mostrando todo, pero eso no es lo que queria. Al final elimine el Query e implanté el siguiente código para el botón "siguiente registro" por ejemplo y me funcionó de maravilla:

Código Delphi [-]
procedure TForm.BitBtn1Click(Sender: TObject);
var CLAVE_CLIENTE,CLAVE_FACTURA:String;
begin
 CLAVE_FACTURA:=FloatToStr(StrToFloat(TFacturas.FieldByName('FAC_ID').AsString) + 1); // corresponde al registro siguiente
 TFacturas.FindKey([CLAVE_FACTURA]); // se esta posicionando en el registro siguiente de la tabla FACTURAS
 CLAVE_CLIENTE:=TFacturas.FieldByName('FAC_CLI_ID').AsString; // clave secundaria de FACTURAS que correspondiente a la clave primaria de CLIENTES
 TClientes.FindKey([CLAVE_CLIENTE]);
end;

con esto puedo navegar por los registros de la tabla FACTURAS indicando el cliente que la posee y los detalles de productos.
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
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
Consulta Maestro Detalle Acker SQL 1 10-07-2006 19:25:58
Problema con maestro detalle escullar Impresión 2 21-12-2005 09:53:01
Problema con Maestro-Detalle Rox77 Conexión con bases de datos 2 28-07-2003 11:28:39
Problema con Maestro-Detalle Rox77 Tablas planas 1 28-07-2003 09:42:21


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


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