Ver Mensaje Individual
  #1  
Antiguo 28-09-2019
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
Cargar datos en TVirtualStringTree

Tengo este código para cargar un TVirtualStringTree:
Código:
int nDatMun[2] = {0, 0};
PTreeEle DatEle;

Mesas->NodeDataSize = sizeof(TTreeElec);
Mesas->BeginUpdate();
Mesas->Clear();

Auxiliar->Close();
Auxiliar->SQL->Text = "SELECT A.Codigo, A.Nombre, B.Codigo, B.Distrito, B.Seccion, B.Mesa, C.Censo, "
                      "COALESCE(SUM(D.Votos), 0) Votos FROM Poblacion A, Mesas B, DatMes C "
                      "LEFT JOIN Resultados D ON C.CodPrv = D.CodPrv AND C.Codigo = D.Mesa AND "
                      "C.Proceso = D.Proceso WHERE A.CodPrv = (SELECT Literal FROM Instalacion "
                      "WHERE Etiqueta = 'Provincia') AND A.CodPrv = B.CodPrv AND A.Codigo = B.Municipio "
                      "AND B.CodPrv = C.CodPrv AND B.Codigo = C.Codigo AND C.Proceso = :Proceso "
                      "GROUP BY A.Codigo, A.Nombre, B.Codigo, B.Distrito, B.Seccion, B.Mesa, C.Censo "
                      "ORDER BY Nombre, Distrito, Seccion, Mesa";
Auxiliar->ParamByName("Proceso")->AsInteger = StrToInt(pSelItem->SubItems->Strings[0]);
Auxiliar->Open();

cAux  = "";
Button18->Enabled = false;
Button19->Enabled = false;
for (; !Auxiliar->Eof; Auxiliar->Next())
{
     if (cAux != Auxiliar->FieldByName("Nombre")->AsString)
     {
          if (!cAux.IsEmpty())
          {
               DatEle        = (PTreeEle)Mesas->GetNodeData(Nodo1);
               DatEle->Censo = nDatMun[0];
               DatEle->Votos = nDatMun[1];
               nDatMun[0]    = 0;
               nDatMun[1]    = 0;
          }

          Nodo1             = Mesas->AddChild(NULL);
          DatEle            = (PTreeEle)Mesas->GetNodeData(Nodo1);
          DatEle->Municipio = Auxiliar->FieldByName("Nombre")->AsString;
          DatEle->Codigo    = Auxiliar->Fields->FieldByNumber(1)->AsInteger;
          cAux              = Auxiliar->FieldByName("Nombre")->AsString;
     }

     Nodo2             = Mesas->AddChild(Nodo1);
     DatEle            = (PTreeEle)Mesas->GetNodeData(Nodo2);
     DatEle->Municipio = FormatFloat("000 ", Auxiliar->FieldByName("Distrito")->AsInteger) +
                         FormatFloat("000 ", Auxiliar->FieldByName("Seccion")->AsInteger) +
                         Auxiliar->FieldByName("Mesa")->AsString;
     DatEle->Censo     = Auxiliar->FieldByName("Censo")->AsInteger;
     DatEle->Votos     = Auxiliar->FieldByName("Votos")->AsInteger;
     DatEle->Codigo    = Auxiliar->Fields->FieldByNumber(3)->AsInteger;

     nDatMun[0] += Auxiliar->FieldByName("Censo")->AsInteger;
     nDatMun[1] += Auxiliar->FieldByName("Votos")->AsInteger;
}
Y para mostrar la información hago esto:
Código:
void __fastcall TfEleccion::MesasGetText(TBaseVirtualTree *Sender, PVirtualNode Node, TColumnIndex Column, TVSTTextType TextType, WideString &CellText)
{
     switch (Column)
     {
          case 0:
               CellText = ((PTreeEle)Sender->GetNodeData(Node))->Municipio;
               break;
          case 1:
               CellText = ((PTreeEle)Sender->GetNodeData(Node))->Votos > 0 ? (WideString)FormatFloat("##,###,##0", ((PTreeEle)Sender->GetNodeData(Node))->Censo) : (WideString)"";
               break;
          case 2:
               CellText = ((PTreeEle)Sender->GetNodeData(Node))->Votos > 0 ? (WideString)FormatFloat("##,###,##0", ((PTreeEle)Sender->GetNodeData(Node))->Votos) : (WideString)"";
               break;
     }
}
Todas las variables están correctamente definidas y la ejecución no da ningún error de ningún tipo. Voy a mostrar tres casos que con el mismo query y dando resultado en los tres me produce resultados distintos.

El query para las EUROPEAS 2019 (valor 39 del parámetro) me da este resultado:

y una vez cargado el árbol se muestra así:


Si hago el proceso para las MUNICIPALES 2019 (valor 40) este es el resultado:

y la carga produce esto:


y como remate con GENERALES 2019 (valor 41) tengo esto:

que se muestra así:


La única diferencia que hay entre los tres querys es que no siempre dan resultados en la columna votos. ¿Puede esto influir en como se muestran los datos en el árbol? Porque no le encuentro otra explicación.
Responder Con Cita