Ver Mensaje Individual
  #10  
Antiguo 16-08-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 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
Cita:
Empezado por lmpadron Ver Mensaje
Ecfisa ... un gusto verte !!! Saludos
Hola Impadron, también me alegra mucho verte por aca


Hola Yugo, si no entendí todo mal, del modo que te pongo en este ejemplo hace lo que solicitas en el primer mensaje. Para probarlo agrega 3 Querys, 3 DataSources y 3 DBGrids
Código:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  // NOMBRE, RE1, ID1
  QueryTabla1->Close();
  QueryTabla1->SQL->Text = "SELECT * FROM TABLA1";
  QueryTabla1->Open();
  DataSource1->DataSet = QueryTabla1;

  // ID - RE1, ID1, RE2, ID2, RE3, ID3, ...
  QueryTabla2->Close();
  QueryTabla2->SQL->Text = "SELECT * FROM TABLA2";
  QueryTabla2->Open();
  DataSource2->DataSet = QueryTabla2;

  // Ocurrencia de nombres
  DataSource3->DataSet = QueryNames;
}
void __fastcall TForm1::DataSource2DataChange(TObject *Sender,TField *Field)
{
  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) OR");
  QueryNames->SQL->Add("(T1.ID1 = T2.ID2 AND T1.RE1 = T2.RE2) OR");
  QueryNames->SQL->Add("(T1.ID1 = T2.ID3 AND T1.RE1 = T2.RE3) OR");
  QueryNames->SQL->Add("(T1.ID1 = T2.ID4 AND T1.RE1 = T2.RE4) OR");
  //
  //  Aquí irían las comprobaciones faltantes...
  //
  QueryNames->SQL->Add("(T1.ID1 = T2.ID26 AND T1.RE1 = T2.RE26) )");
  QueryNames->ParamByName("PID")->AsInteger = QueryTabla2->FieldByName("ID")->AsInteger;
  QueryNames->Open();
}
Pero si te fijas, en la Tabla2 agregué un campo ID (T2.ID) de tipo integer que no se repite (UNIQUE).
Esto es necesario para poder distinguir unívocamente en que registro estamos parados, ya que los nombres a mostrar, corresponden a las comparaciones entre los pares de columnas (REx / IDx) de Tabla1 y las columnas (RE1/ID1 - RE26/ID26) de ese registro de Tabla2 y no otro.

Probé la Tabla2 con un ID y cuatro pares de valores (8 columnas) y funciona correcto, se me hacía pesado escribir las 22 comprobaciones restantes...

Saludos
__________________
Daniel Didriksen

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