Ver Mensaje Individual
  #3  
Antiguo 19-04-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
Angel.Matilla Va por buen camino
Como no, pero es un poco lío.
Código:
cAux = "AND Mesa IN (SELECT Codigo FROM Mesas WHERE CodPrv = A.CodPrv";
switch (((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel)
{
     case 2:
          cAux = cAux + " AND Municipio IN (SELECT Codigo FROM Dl01 WHERE CodPrv = A.CodPrv AND CodPar = :Codigo)";
          break;
     case 4:
          cAux = cAux + " AND Municipio = :Codigo";
          break;
}
cAux = cAux + ")";

fMenu->Auxiliar->Close();
fMenu->Auxiliar->SQL->Text = "SELECT A.Sigla,";
fMenu->Auxiliar->SQL->Add("COALESCE(B.Votos, 0) Votos1, (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv AND Proceso = :Proceso1 " + cAux + ") Total1,"
fMenu->Auxiliar->SQL->Add("COALESCE(C.Votos, 0) Votos2, (SELECT SUM(Votos) FROM Resultados WHERE CodPrv = A.CodPrv AND Proceso = :Proceso2 " + cAux + ") Total2, CASE WHEN A.Codigo = -3 THEN 0 WHEN Codigo < 0 THEN A.Codigo ELSE 1 END Orden");
fMenu->Auxiliar->SQL->Add("FROM Partidos A LEFT JOIN (SELECT Partido, SUM(Votos) Votos FROM Resultados WHERE CodPrv = :PrvIns AND Proceso = :Proceso1 " + StringReplace(cAux, "A.CodPrv", ":PrvIns", oReplace) + " GROUP BY Partido) B ON B.Partido = A.Codigo");
fMenu->Auxiliar->SQL->Add("LEFT JOIN (SELECT Partido, SUM(Votos) Votos FROM Resultados WHERE CodPrv = :PrvIns AND Proceso = :Proceso2 " + StringReplace(cAux, "A.CodPrv", ":PrvIns", oReplace) + " GROUP BY Partido) C ON C.Partido = A.Codigo");
fMenu->Auxiliar->SQL->Add("WHERE A.CodPrv = :PrvIns AND (B.Votos > 0 OR C.Votos > 0) ORDER BY Orden DESC, Votos1 DESC, Votos2 DESC, Sigla");

lPrueba = false;
for (nItem = 0; nItem < SelRes->Items->Count; nItem ++)
     if (SelRes->Items->Item[nItem]->Checked)
     {
          fMenu->Auxiliar->ParamByName("Proceso1")->AsInteger = StrToInt(SelRes->Items->Item[nItem]->SubItems->Strings[0]);
          fMenu->Auxiliar->ParamByName((lPrueba ? (String)"Proceso2" : (String)"Proceso1"))->AsInteger = StrToInt(SelRes->Items->Item[nItem]->SubItems->Strings[0]);
          lPrueba = !lPrueba;
     }
if (((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel > 1)
     fMenu->Auxiliar->ParamByName("Codigo")->AsInteger = ((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Codigo;
fMenu->Auxiliar->ParamByName("PrvIns")->AsString  = ((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Provincia;
if (((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel < 4 && StrToIntDef(PadMun->Text, 0) > 0)
     fMenu->Auxiliar->ParamByName("Padron")->AsInteger = StrToIntDef(PadMun->Text, 0);
fMenu->Auxiliar->Open();
  • cAux es un AnsiString
  • SelRes es un TListView
  • Dl01 es una vista de la BB.DD.
En el código que puse al principio supongo que ((PTreeMun)MunRes->GetNodeData(MunRes->FocusedNode))->Nivel vale 1 y por eso no aparece parte del código que se puede montar.
Responder Con Cita