Ver Mensaje Individual
  #1  
Antiguo 18-06-2018
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 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 PartidoComarcaMunicipioCodigo 
  FROM Dl01 
 WHERE CodPrv 
= (SELECT Literal FROM Instalacion WHERE Etiqueta 'Provincia'
 
ORDER BY 123
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->EoffMenu->Query->Next())      for (nItem 0nItem 3nItem ++)
          if (
Nodo[nItem] == NULL || Nodo[nItem]->Text != fMenu->Query->Fields->FieldByNumber(nItem 1)->AsString)
               switch (
nItem)
               {
                    case 
0:
                         
LisMun->Items->Add(NULLfMenu->Query->Fields->FieldByNumber(1)->AsString);
                         
Nodo[0] = LisMun->Items->Item[LisMun->Items->Count 1];
                         break;
                    case 
1:
                         if (
nIndex == 1)
                              
LisMun->Items->Add(NULLfMenu->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(NULLfMenu->Query->Fields->FieldByNumber(3)->AsStringnewNodo);
                         else
                              
LisMun->Items->AddChildObject(Nodo[nItem 1], fMenu->Query->Fields->FieldByNumber(3)->AsStringnewNodo);
                         
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