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 21-05-2011
Avatar de Malau
Malau Malau is offline
Miembro
 
Registrado: ago 2008
Ubicación: Córdoba, Argentina
Posts: 20
Poder: 0
Malau Va por buen camino
Consulta SQL devuelve registros duplicados

Hola a todos! He buscado en el foro y no doy con la solución a mi problema, la situación es la siguiente: estoy con un programa de facturación, usando Delphi 7 e InterBase 6.5, y a la hora de consultar sobre las facturas realizadas obtengo que en algunos casos se muestra un mismo registro más de una vez (duplicado), claro que dicho registro existe sólo una vez en la tabla. Luego intenté usando la clausula distinct pero el resultado es el mismo. Agradezco a quien pueda ayudarme.

Código:
begin
  DM.IBDataSet.Locate('NOMBRE', ComboBox.Text, []);
  DM.IBQuery.SQL.Clear;
  DM.IBQuery.SQL.Add('select distinct * from FACTURAS, DETALLES, PRESTA where FACTURAS.ID_FACTURA=DETALLES.FACTURA and  DETALLES.PRESTA=PRESTA.ID_PRESTA and PRESTA.PERSONAL=:per and ANULADA = ''0''  ');
  DM.IBQuery.ParamByName('per').AsInteger:= DM.IBDataSetID_PERSONAL.Value;
  DM.IBQuery.Open;
end;
Responder Con Cita
  #2  
Antiguo 21-05-2011
Avatar de gmontes
gmontes gmontes is offline
Miembro
 
Registrado: jul 2004
Ubicación: Culiacán, Sinaloa, México
Posts: 668
Poder: 20
gmontes Va por buen camino
se debe repetir porque lo comparas con el detalle de tu factura

from FACTURAS, DETALLES, PRESTA

y si una factura tiene 5 productos, pues te va a aparecer 5 veces el numero de factura

lo que sucede es que es en la tabla detalle donde tu compruebas sobre el parametro per, en lugar de hacerlo unicamente sobre la tabla factura

Código:
DM.IBQuery.SQL.Add('select distinct * from FACTURAS,  PRESTA where   FACTURAS.PRESTA=PRESTA.ID_PRESTA and PRESTA.PERSONAL=:per and ANULADA = ''0''  ');
  DM.IBQuery.ParamByName('per').AsInteger:= DM.IBDataSetID_PERSONAL.Value;
__________________
Todos llevamos nuestros demonios a cuestas..
Responder Con Cita
  #3  
Antiguo 23-05-2011
Avatar de Malau
Malau Malau is offline
Miembro
 
Registrado: ago 2008
Ubicación: Córdoba, Argentina
Posts: 20
Poder: 0
Malau Va por buen camino
Hola gmontes! gracias por responder y aportar ideas. No había detectado que repite el registro tantas veces como detalles contiene la factura pero, no puedo hacer la corrección que me recomiendas, ya que PRESTA es clave foránea en la tabla DETALLES y no en la tabla FACTURAS. (PRESTA hace referencia a las prestaciones de los miembro del personal).

En mi ejemplo quiero mostrar las facturas realizadas a determinado miembro de personal. Ahora bien, no podría llevar mi foránea a la tabla FACTURAS porque en este caso, que pasaría si en una misma factura existen dos prestaciones distintas de dos miembros de personal diferentes?

Espero ser clara con lo que necesito. Saludos!
Responder Con Cita
  #4  
Antiguo 24-05-2011
Avatar de gmontes
gmontes gmontes is offline
Miembro
 
Registrado: jul 2004
Ubicación: Culiacán, Sinaloa, México
Posts: 668
Poder: 20
gmontes Va por buen camino
lo que puedes hacer es listar los campos que ocupas y utilizar la opcion group by para que la agruper por factura
__________________
Todos llevamos nuestros demonios a cuestas..
Responder Con Cita
  #5  
Antiguo 24-05-2011
abelg abelg is offline
Miembro
 
Registrado: jul 2004
Posts: 50
Poder: 20
abelg Va por buen camino
Si lo que quieres es mostrar las facturas solamente entonces esto te quedará espero bien:

Código SQL [-]
select distinct F.* 
from FACTURAS F
       inner join DETALLE D on D.FACTURA = F.ID_FACTURA
       inner join PRESTA P on D.PRESTA = P.ID_PRESTA
where P.PERSONAL= : per and ANULADA = '0'

Saludos.

solo modifique la consulta un poco tu la pones en tu componente como quieras por código o directo en su propiedad SQL.
Responder Con Cita
  #6  
Antiguo 26-05-2011
Avatar de Malau
Malau Malau is offline
Miembro
 
Registrado: ago 2008
Ubicación: Córdoba, Argentina
Posts: 20
Poder: 0
Malau Va por buen camino
Problema solucionado! Gracias amigos por la ayuda que me han dado. Abelg lo resolví como me dijiste.
Saludos!
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
Cuantos registros devuelve una consulta kizé MySQL 1 25-10-2010 10:13:30
devuelve registros borrados en consulta a dbase janlo SQL 8 15-02-2008 17:55:34
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 01-10-2007 23:19:44
Consulta para ver registros duplicados MarcoMae SQL 2 30-03-2005 18:40:43
Limitar los registros que devuelve una consulta roman Conexión con bases de datos 1 03-09-2004 09:08:45


La franja horaria es GMT +2. Ahora son las 14:04:09.


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