Ver Mensaje Individual
  #1  
Antiguo 18-06-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Reputación: 21
Angel.Matilla Va por buen camino
Cargar un TTreeView

Me estoy volviendo un poco loco para cargar un TTreView. El objeto en concreto ya lo conocéis de otro hilo; es este:


para ello uso este query:
Código PHP:
SELECT DISTINCT Partido, Comarca, Municipio, Codigo 
  FROM Dl01 
 WHERE CodPrv 
= (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') 
 
ORDER BY 1, 2, 3, 4 
que me da este resultado:

El orden del árbol, como se ve en la imagen es Partido > Comarca > Municipio.

Y digo que me estoy volviendo un poco loco porque todavía no he dado en como hace la carga del Tree sin tener que ejecutra tres querys distintos o meter un montón de código, como tengo ahora, con condiciones y variables auxiliares.

Por otra parte me está ocurriendo algo que me está dejando perplejo. Ahora cargo el Tree con este bucle a partir de ese query anterior:
Código PHP:
tNodo newNodo = new TMyRec;
for (; !
fMenu->Query->Eof; fMenu->Query->Next())      for (nItem = 0; nItem < 3; nItem ++)
          if (
Nodo[nItem] == NULL || Nodo[nItem]->Text != fMenu->Query->Fields->FieldByNumber(nItem + 1)->AsString)
               switch (
nItem)
               {
                    case 
0:
                         
LisMun->Items->Add(NULL, fMenu->Query->Fields->FieldByNumber(1)->AsString);
                         
Nodo[0] = LisMun->Items->Item[LisMun->Items->Count - 1];
                         break;
                    case 
1:
                         if (
nIndex == 1)
                              
LisMun->Items->Add(NULL, fMenu->Query->Fields->FieldByNumber(2)->AsString);
                         else
                              
LisMun->Items->AddChild(Nodo[nItem - 1], fMenu->Query->Fields->FieldByNumber(2)->AsString);
                         
Nodo[1] = LisMun->Items->Item[LisMun->Items->Count - 1];
                         break;
                    case 
2:
                         
newNodo         = new TMyRec;
                         
newNodo->Codigo = fMenu->Query->Fields->FieldByNumber(4)->AsInteger;
                         if (
nIndex == 2)
                              
LisMun->Items->AddObject(NULL, fMenu->Query->Fields->FieldByNumber(3)->AsString, newNodo);
                         else
                              
LisMun->Items->AddChildObject(Nodo[nItem - 1], fMenu->Query->Fields->FieldByNumber(3)->AsString, newNodo);
                         
Nodo[2] = LisMun->Items->Item[LisMun->Items->Count - 1];
                         break;
                } 
Ese newNodo es una estructura que está declarada así:
Código PHP:
typedef struct MyRec
{
     
int Codigo;

} 
TMyRec;
typedef TMyRec *tNodo; 
Sé que es un código complejo, pero no se me ocurrió otra manera más sencilla (y de ahí mi pregunta anterior). El probelma viene con la última entrada del TreeView: cuando voy a rescatar el valor de ese código me devuelve SIEMPRE cero por lo que luego no encuentra los datos asociados a ese nodo y me ocurre SÓLO con el último elemento del arbol.
Responder Con Cita