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.