Ver Mensaje Individual
  #16  
Antiguo 26-08-2014
Yugo Yugo is offline
Miembro
NULL
 
Registrado: jul 2014
Posts: 25
Reputación: 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