Cita:
Empezado por Angel.Matilla
Gracias por la sugerencia bucanero. Entiendo el sentido del código que me pones en Delphi, pero me pierdo al pasarlo a Builder. Supongo que la instrucción repeat será el equivalente al Next() de Builder, para que avance al siguiente registro de la tabla o query. Pero si es así hay algo en el código que no me cuadra: Si después de asignar cada nivel del TreeView avanzas un registro dejo sin leer parte de cada fila del query. O estoy interpretando mal la idea.
|
La instrucción
repeat es similar al while con la evaluación de la condición al final del bucle, he traducido mi código al similar en C++ con tus nombres de campos y variables:
Código:
Query->First();
while ( !fMenu->Query->Eof ) {
//inserta el nodo del primer campo
Nodo[0] = LisMun->Items->Add(Nil, fMenu->Query->Fields->FieldByNumber(1)->AsString);
do {
//inserta el nodo del segundo campo
Nodo[1] = LisMun->Items->Add(Nodo[0], fMenu->Query->Fields->FieldByNumber(2)->AsString);
do {
//inserta el nodo del tercer campo
newNodo = new TMyRec;
newNodo->Codigo = fMenu->Query->Fields->FieldByNumber(4)->AsInteger;
Nodo[2] = LisMun->Items->AddChildObject(Nodo[1], fMenu->Query->Fields->FieldByNumber(3)->AsString, newNodo);
// avanza en la consulta
fMenu->Query->Next();
// repite el bucle hasta final de la consulta o
// hasta que cambie el segundo campo de la tabla
} while ( !fMenu->Query->Eof &&
(Nodo[2]->Text == fMenu->Query->Fields->FieldByNumber(2)->AsString));
// repite el bucle hasta final de la consulta o
// hasta que cambie el primer campo de la tabla
} while ( !fMenu->Query->Eof &&
(Nodo[1]->Text == fMenu->Query->Fields->FieldByNumber(1)->AsString));
}
el código funciona siempre que la consulta SQL este ordenada pro PARTIDO, COMARCA y MUNICIPIO.