Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-08-2014
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
Si no te es molestia ponme el SQL para crear las tablas tuyas y algunos juegos de datos con los que verificar ... no es que no lo pueda hacer yo mismo... es q soy muy vago !!!
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
  #2  
Antiguo 24-08-2014
Yugo Yugo is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 25
Poder: 0
Yugo Va por buen camino
Qué tal Impadron!! muchas gracias por tu comentario. Después de analizar un poco tu código, hay algo que no entiendo muy bien:

Básicamente, para el primer par de campos de la TABLA2, esa subconsulta que expones devuelve por un lado el campo ID1 de la TABLA2 del registro actual (con la comparación),

Código:
ID ='"Query1->FieldByName("id")->Text"'
por otro lado devuelve el campo RE1 de la TABLA2 del registro actual (con la misma comparación anterior) y finalmente, devuelve el campo Nombre de la TABLA1 que coincide tanto con ID1 como con RE1 y dicha columna la renombra como PAR_ID1RE1... No sé si estoy en lo cierto o no.

Código:
"(SELECT nombre FROM tabla1 WHERE ID1 IN (SELECT ID1 FROM table2 WHERE ID = '"Query1->FieldByName("id")->Text"') AND RE1 IN (SELECT RE1 FROM table2 WHERE ID = '"Query1->FieldByName("id")->Text"') ORDER BY nombre ASC) AS PAR_ID1RE1, "
Esa parte de la subconsulta SELECT entiendo que nos sirve para determinar la operación sobre el registro actual y no sobre otro cualquiera ¿cierto? Si es así, esa comparación de datos debería realizarse entre números enteros porque el campo ID de la TABLA2 es de tipo INTEGER. Si estoy equivocado te agradecería que pudieses sacarme de la duda.

Por otro lado, he probado tu código pero al compilar me salta un error E2121. Function call missing ) y por más que le doy vueltas al código no encuentro dónde puede faltar ese paréntesis de cierre que se supone que falta.

En cuanto al asunto de pasarte el código SQL de creación de las tablas, debo decir que las creé directamente desde el Database Desktop y rellené con datos desde él. Pero no te preocupes, trato de crear el código y pasártelo, ¿te parece bien? Bueno me pongo a ello compañero. Hasta luego y muchísimas gracias de nuevo.

PD: Ecfisa compañero, he estado también trabajando sobre el código que expusistes para ajustarlo a lo que necesito pero aún no doy con la tecla. Puedo encontrar las posibles coincidencias sobre el primer par ID1-RE1, así que traté de hacerlo usando un bucle de 13 repeticiones (para los 13 pares de campos de un registro), pero nada, de momento no tengo resultado. Seguiré experimentando para tratar de dar con la solución con vuestra ayuda. Saludos!!
Responder Con Cita
  #3  
Antiguo 24-08-2014
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 Yugo.
Cita:
Empezado por Yugo Ver Mensaje
...
PD: Ecfisa compañero, he estado también trabajando sobre el código que expusistes para ajustarlo a lo que necesito pero aún no doy con la tecla. Puedo encontrar las posibles coincidencias sobre el primer par ID1-RE1, así que traté de hacerlo usando un bucle de 13 repeticiones (para los 13 pares de campos de un registro), pero nada, de momento no tengo resultado. Seguiré experimentando para tratar de dar con la solución con vuestra ayuda. Saludos!!
Mira, lo que yo entendí es que hay que comparar cada par de columnas REx ~ IDx del registro actualmente posicionado en TABLA2 con cada par de columnas RE1 ~ ID1 de cada registro de la TABLA1 y mostrar la columna NOMBRE de TABLA1 cuando se halle una coincidencia.

Te adjunto las fuentes de un demo que hace lo anterior para que puedas revisarlo con tranquilidad. Crea una carpeta en tu disco y descomprimí el archivo ZIP allí. (incluye las tablas).

Saludos
Archivos Adjuntos
Tipo de Archivo: zip Yugo.zip (620,7 KB, 1 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 26-08-2014
Yugo Yugo is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 25
Poder: 0
Yugo Va por buen camino
Hola ecfisa, tu código está genial. El resultado de la búsqueda devuelve las posibles coincidencias entre los pares ID1/RE1 de la TABLA1 con todos los pares IDx/REx de la TABLA2 listando todos los nombres coincidentes en ese registro actual. Pero lo que estoy tratando de averiguar, basándome en ese código sería tratar cada par IDx/REx como un par independiente del resto de pares de la TABLA2. ¿Para qué hacer eso? Pues al considerar dichos pares como independientes unos de otros, tomo el primero de ellos, busco posibles coincidencias con la TABLA1 y si las hay, sólo me interesa coger el primer nombre del resultado de la consulta (por ejemplo, añadiendo en la TABLA1 que me facilitas otro registro como [Armando]-[1]-[1] habría dos registros con el mismo ID1-RE1 pero con nombre distinto). Entonces, si nos situamos sobre un registro cualquiera de la TABLA2, empezamos con una primera consulta sobre el primer par independiente ID1-RE1 de la TABLA2:
Código:
  QueryNames->Close(); 
  QueryNames->SQL->Clear(); 
  QueryNames->SQL->Add("SELECT T1.NOMBRE"); 
  QueryNames->SQL->Add("FROM TABLA1 T1 JOIN TABLA2 T2 ON T2.ID = :PID AND"); 
  QueryNames->SQL->Add("(T1.ID1 = T2.ID1 AND T1.RE1 = T2.RE1)"); 
  QueryNames->SQL->Add("ORDER BY Nombre"); 
  QueryNames->ParamByName("PID")->AsInteger = QueryTabla2->FieldByName("ID")->AsInteger; 
  QueryNames->Open();
Obtendríamos en el resultado de la consulta dos coincidencias ID1 = 1 y RE1 = 1, los nombres Pedro y Armando. De los cuales sólo me interesaría tomar el de Armando por ser el primero en orden alfabético.

Después de esto, pasaría al segundo par independiente de la TABLA2 (con los campos ID2-RE2) para volver a realizar la consulta en busca de posibles coincidencias con la TABLA1:
Código:
  QueryNames->Close(); 
  QueryNames->SQL->Clear(); 
  QueryNames->SQL->Add("SELECT T1.NOMBRE"); 
  QueryNames->SQL->Add("FROM TABLA1 T1 JOIN TABLA2 T2 ON T2.ID = :PID AND"); 
  QueryNames->SQL->Add("(T1.ID1 = T2.ID2 AND T1.RE1 = T2.RE2)"); 
  QueryNames->SQL->Add("ORDER BY Nombre"); 
  QueryNames->ParamByName("PID")->AsInteger = QueryTabla2->FieldByName("ID")->AsInteger; 
  QueryNames->Open();

Y así sucesivamente para los 13 pares de forma independientes.

Yo he tratado de hacer un bucle for de 13 repeticiones tal que así:
Código:
  for(int x = 1; x <= 13; x++) { 
    QueryNames->Close(); 
    QueryNames->SQL->Clear(); 
    QueryNames->SQL->Add("SELECT T1.NOMBRE"); 
    QueryNames->SQL->Add("FROM TABLA1 T1 JOIN TABLA2 T2 ON T2.ID = :PID AND"); 
    QueryNames->SQL->Add("(T1.ID1 = T2.ID"+IntToStr(x)+" AND T1.RE1 = T2.RE"+IntToStr(x)+")"); //(T1.ID1 = T2.IDx AND T1.RE1 = T2.REx) 
    QueryNames->SQL->Add("ORDER BY Nombre"); 
    QueryNames->ParamByName("PID")->AsInteger = QueryTabla2->FieldByName("ID")->AsInteger; 
    QueryNames->Open(); //Aquí tomaría el primer nombre del resultado 
  }
Pero de momento no doy con la tecla. Un saludo y muchísimas gracias!!

Última edición por ecfisa fecha: 26-08-2014 a las 20:35:38. Razón: corregir problema WYSWYG
Responder Con Cita
  #5  
Antiguo 04-09-2014
Yugo Yugo is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 25
Poder: 0
Yugo Va por buen camino
Hola chicos!! después de hacer varias pruebas, gracias a vuestra ayuda he podido conseguir lo que buscaba en un principio con el siguiente código situado en el evento OnDataChange del TDataSource2:

Código:
 for(int x = 1; x <= 13; x++)
 {
    Query2->Close();
    Query2->SQL->Clear();
    Query2->SQL->Add("SELECT T1.NOMBRE");
    Query2->SQL->Add("FROM TABLA1 T1 JOIN TABLA2 T2 ON T2.ID = :PID AND");
    //(T1.ID1 = T2.IDx AND T1.RE1 = T2.REx)
    Query2->SQL->Add("(T1.ID1 = T2.ID"+IntToStr(x)+" AND T1.RE1 = T2.RE"+IntToStr(x)+")"); 
    Query2->SQL->Add("ORDER BY Nombre");
    Query2->ParamByName("PID")->AsInteger = Query1->FieldByName("ID")->AsInteger;
    Query2->Open();

    if(!Query2->FieldByName("Nombre")->AsString.IsEmpty())  //Si la consulta devuelve un resultado
   {
     //aquí quiero cambiar la propiedad Caption del TLabel que corresponde a Label[x] ya previamente situado
     //en el Form.
   }
   else
   {
     //No hacemos nada. No modificar la propiedad Caption que previamente tiene el TLabel nº [x]
   }

 }
Mi duda está en cómo hacer referencia a cada objeto TLabel situado en el Form para modificar su propiedad Caption dentro del bucle for, donde el índice de cada etiqueta corresponde con la vble. x de dicho bucle, es decir,
Labelx ..... [Label1..Label13].

Gracias de nuevo.
Responder Con Cita
  #6  
Antiguo 04-09-2014
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 Yugo.

Me alegro mucho que hayas solucionado ese tema, pero por favor publica esta nueva consulta en un nuevo hilo como indica la guía de estilo

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 04-09-2014
Yugo Yugo is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 25
Poder: 0
Yugo Va por buen camino
De acuerdo ecfisa. Voy a ello y muchas gracias por vuestra ayuda!!
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
Migrar version BCB6 Toni C++ Builder 6 20-10-2014 14:44:32
TurboPower Systool bcb6 eldonfsr C++ Builder 0 15-01-2008 04:11:35
Coincidencia?? vtdeleon Debates 2 28-04-2006 13:43:17
Exportación de datos de Excel a Tablas Paradox Mone Conexión con bases de datos 1 31-10-2005 21:15:40
Como buscar en una tabla Paradox ? gregorio Tablas planas 2 25-04-2005 18:54:29


La franja horaria es GMT +2. Ahora son las 03:24:56.


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