Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Cargar datos en TVirtualStringTree (https://www.clubdelphi.com/foros/showthread.php?t=94199)

Angel.Matilla 28-09-2019 11:54:26

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.

Angel.Matilla 28-09-2019 11:56:09

Perdonad
 
¡¡¡NO HE DICHO NADA!!! Acabo de ver que estoy haciendo mal. :(:(

Casimiro Notevi 28-09-2019 12:04:22

Clubdelphi, el único sitio del mundo que te solucionan el problema mediante telepatía.


La franja horaria es GMT +2. Ahora son las 21:25:33.

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