Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-05-2012
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Question Filtrar 2 tablas entre si

Estimados, nuevamente necesito de vuestra solidaria ayuda, tengo una pequeña duda, normalmente cuando necesito filtrar 2 tablas entre si, siempre me a tocado según algún criterio en común, pero en este caso necesito a la inversa, tengo una lista de correos (DBGrid1) donde muestra todas las cuentas de correos inscritas y una lista 2 (DBGrid2) en donde solo muestra los destinatarios previamente ingresados con doble clic de la lista 1 (DBGrid1), la pregunta, de que manera puedo filtrar la lista 1 para que solo me muestre los correos que no están en la lista 2??? que la tabla 1 refleje los correos no ingresados en la tabla 2 mientras se agregan... Se entiende???
De antemano muchísimas gracias…
Responder Con Cita
  #2  
Antiguo 04-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Lenny.
Cita:
de que manera puedo filtrar la lista 1 para que solo me muestre los correos que no están en la lista 2 ???
Probá con esta consulta:
Código SQL [-]
SELECT *     
FROM TABLA1 T1
WHERE NOT EXISTS (SELECT T2.ID FROM TABLA2 T2 WHERE T2.TABLA1_ID = T1.ID)

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 04-05-2012 a las 01:47:59.
Responder Con Cita
  #3  
Antiguo 05-05-2012
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Exclamation Gracias...

Gracias estimado, aunque me lio muchisimo con las consultas tratare de sacarlo adelante, igualmente si me puedes echar una mano de como usarlo te lo agradeceria bastante...

Utilizodelphi 2010, MySQL, Zeos 7.0.0...
Responder Con Cita
  #4  
Antiguo 05-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Lenny.

Para brindarte una ayuda más concreta, sería bueno si nos pones los campos de las dos tablas (solo los relevantes no es necesario que los incluyas a todos). También es importante conocer mediante cuál campo se relacionan ambas tablas.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 05-05-2012
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Question

Dale, mira, te explico en detalle y lo mas resumido posible:

Tengo Delphi 2010, MySQL, Zeos 7.0.0.
Tengo 8 componentes, 2 DBGrid, 2 DataSource, 2 ZConnection, 2 ZTable...
Los cuales se llaman:
DBGrid1, DataSource1 = Correos, ZConnection1 = Correos_C, ZTable1 = Correos_T
DBGrid2, DataSource2 = CorreosNC, ZConnection2 = CorreosNC_C, ZTable2 = CorreosNC_T

La idea como les comentaba, es poder a travez de un boton o doble clic pasar los datos (en este caso correos y usuarios) a la otra tabla, lo hago de esta manera:

Código Delphi [-]
CorreosNC_T.Insert;
CorreosNC_T.FieldbyName('AREA').AsString := Correos_T.FieldbyName('AREA').AsString;
CorreosNC_T.FieldbyName('NOMBRE').AsString := Correos_T.FieldbyName('NOMBRE').AsString;
CorreosNC_T.FieldbyName('CORREO').AsString := Correos_T.FieldbyName('CORREO').AsString;
CorreosNC_T.Post;

Tonces, lo que necesito es que la Tabla1 salgan los correos que no estan en la Tabla2, ya que la Tabla1 es comunitaria. Se entiende???.

De antemano muchisimas gracias, por ak estare pendiente...

Última edición por Lenny fecha: 05-05-2012 a las 01:20:59.
Responder Con Cita
  #6  
Antiguo 05-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Lenny.

En realidad me refería a la estructura de las tablas, pero vamos a suponer que:

TABLA1
Cita:
ID (identificador)
CP1
CP2
TABLA2
Cita:
ID (identificador)
CP1
CP2
CP3
TABLA1_ID ( campo referencia a TABLA1 (en común) )
Algún campo en comun tendrán que tener por que si no sería imposible saber cuáles registros de la TABLA1 no están en la TABLA2. En este caso es: TABLA2.TABLA1_ID = TABLA1.ID.

Entonces para la TABLA1 y desde Delphi sería algo así:
Código Delphi [-]
...
  with TuQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM TABLA1 T1 ');
    SQL.Add('WHERE NOT EXISTS ');
    SQL.Add('(SELECT T2.ID FROM TABLA2 WHERE T2.TABLA1_ID = T1.ID)');
    Open;
  end;
...
Es por eso que te pedía los nombres reales de campos y tablas; para evitarte las traducciones...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 05-05-2012
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Question

aps... sorry!!!
Seria asi:

Correos_T (ZTable1)
Usuario (identificador)
Area
Correo

CorreosNC_T (ZTable2)
Usuario (identificador)
Area
Correo

Esa seria la estructura de la tabla, gracias nuevamente!!!
Responder Con Cita
  #8  
Antiguo 06-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Lenny.

Suponiendo que Correo es el campo en común (el que servirá para saber si está ingresado o no) creo que sería:
Código Delphi [-]
...
  with TuQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM Correos_T T1 ');
    SQL.Add('WHERE NOT EXISTS ');
    SQL.Add('(SELECT T2.Usuario FROM CorreosNC_T WHERE T2.Correo = T1.Correo)');
    Open;
  end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 06-05-2012
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Estimado, gracias por la paciencia y ayuda...
Sorry, pero aun no me funciona, preciono el Button y no hace nada... te dejo como lo tengo:

Código Delphi [-]
 
begin
  with ZQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM Correos ');
    SQL.Add('WHERE NOT EXISTS ');
    SQL.Add('(SELECT CorreosNC.Correo FROM CorreosNC WHERE CorreosNC.Correo = Correos.Correo)');
    Open;
  end;
end;

Y este es el orden que tengo:

Correos_T (ZTable1), Nombre Tabla: Correos
Usuario
Area
Correo

CorreosNC_T (ZTable2), Nombre Tabla: CorreosNC
Usuario
Area
Correo

Y efectivamente el campo Correo es el comun en ambos, de antemano muchas gracias ante cualquier ayuda...

Última edición por Lenny fecha: 06-05-2012 a las 09:12:41.
Responder Con Cita
  #10  
Antiguo 06-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Lenny.

Entonces seguramente sea el campo Usuario el que identifica y por tanto sea común a ambas tablas, sobre el que debería realizarse la comparación.

Código SQL [-]
SELECT * FROM CORREOS_T T1
WHERE NOT EXISTS (SELECT T2.USUARIO FROM CORREOSNC_T T2 WHERE T2.USUARIO = T1.USUARIO)

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 07-05-2012
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Question

Estimado, mil gracias por toda la ayuda, realmente quien cometia el error era yo, a pesar de llevar unoa añitos novateando con delphi nunca habia trabajado con consultas, ahora afortunadamente me vi obligado a hacerlo y me costo pero entendi, el error era que estaba con el ZTable en ves del ZQuery, o sea, hacia todo bien pero noe staba apuntando adonde devia y como. Funciono increiblemente bien!!! hace lo que necesito y estoy buscando referencias a consultas para seguir aprendiendo junto a ustedes quienes me han sacado de tantos apuros, nuevamente gracias!!!

Solo una pregunta, como para cerrar el tema, es mejor trabajarlo todo con consultas???
Tengo un par de programas pequeños que se trabajan local y a veces desde afuera de la red, todo impeque, pero al hacerlo con consulta los tiempos de respuesta mejoran??? eso y gracias nuevamente...
Responder Con Cita
  #12  
Antiguo 07-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Lenny.

No conozco los componentes Zeos, pero en general la ventaja de los XQuerys sobre los XTables es que estas últimas traen todos los registros y en la consulta se puede seleccionar sólo los necesarios, disminuyendo así drásticamente el tráfico y los tiempos. En contrapartida las inserciones, modificaciones y borrados son mucho más simples de realizar con los XTables.

Revisá este enlace: Tipo de tablas en ZEOS: ¿TZQuery o TZTable? .

Los IBX por ejemplo, tienen el TIBDataSet, que conjuga los mejores aspectos de ambos componentes. Pero desconozco si Zeos tiene algo parecido.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 07-05-2012
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Question

Muchas gracias, he ledio el link y otros comentarios que he buscado en google, quede bastante mas claro aunque algo mareado sobre Query y Table, pero bue, tengo varios dias mas para estudiarlo a fondo, igualmente utilizo Zeos la version alpha de zeos 7.0.0 que datan del 2009 y no se ve mucho futuro en que saquen una version definitiva, y segun vi en algunos casos tiene errores relativamente graves... por lo cual, la ultima pregunta que hago para no desviarme mas del tema, sigo con Zeos??? concoes alguna apternativa a Zeos que sea igual o mejor que esta para trabajar con MySQL??? es una aplicacion que a futuro se piensa hacerla accesible via web, por eso MySQL y es parte de itras palicaciones pequeñas que se estan diseñando ocupando la misma base de datos, bueno, espero no estar abusando mas de la cuenta, nuevamente gracias!!!
Responder Con Cita
  #14  
Antiguo 07-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Lenny.

Lamento no poder aconsejarte sobre los componentes más adecuados para MySQL ya que uso Firebird.

Pero lo que sí te aconsejo es que esta, tu última pregunta, la pongas como un nuevo hilo en el foro MySQL. El motivo de esta sugerencia, es por que ese foro es visitado por compañeros expertos en ese gestor de base de datos y te podrán asesorar mejor.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
filtrar 2 tablas BlueSteel SQL 4 23-07-2011 01:37:23
Filtrar tres tablas paradox al tiempo Camilo Conexión con bases de datos 3 09-10-2007 11:50:51
Problema al filtrar un Query entre fechas judit25 Conexión con bases de datos 18 20-04-2007 01:03:38
Filtrar Registros entre fechas capitan_nemo Tablas planas 1 02-04-2007 09:12:55
Update entre tablas rafadrover SQL 4 20-08-2003 21:42:49


La franja horaria es GMT +2. Ahora son las 23:05:06.


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