Hola de nuevo,
Verán estoy un poco atorado con un procedimiento recursivo, a ver si me pueden "echar una mano". Se trata de éste:
Código:
void __fastcall TForm1::obtenerhojas (int codigo)
{
DataModule->Query->Close();
DataModule->Query->SQL->Clear();
DataModule->Query->SQL->Add("\
SELECT ARBOL_CODIGO, ARBOL_ESHOJA \
FROM ARBOL WHERE \
ARBOL_CODPADRE=:codigo and ARBOL_BORRADO=0 \
ORDER BY ARBOL_ORDEN");
DataModule->Query->ParamByName("codigo")->AsInteger=codigo;
DataModule->Query->Prepare();
DataModule->Query->Open();
DataModule->Query->First();
while(!DataModule->Query->Eof)
{
if (DataModule->Query->FieldByName("ARBOL_ESHOJA")->AsInteger == 1)
{
int cod= DataModule->Query->FieldByName("ARBOL_CODIGO")->AsInteger;
codigos.push_back(cod);
}else{
int cod= DataModule->Query->FieldByName("ARBOL_CODIGO")->AsInteger;
obtenerhojas(cod);
}
DataModule->Query->Next();
}
}
Donde codigos ha sido declarado como:
Código:
vector <int> codigos;
El tema es que, como ya imaginarán, no funciona del todo bien...
Supongamos que la primera vez le paso el codigo 683 que corresponde a la siguiente jerarquía:
Código:
683 - 684 - 685 - 686
- 687
- 688
- 689 - 690
- 691
- 695 - 693
En ese caso me guarda en codigos el 686 y el 687. Osea le falta el 688, 690, 691 y 693.
La razón creo tenerla clara y es que al entrar cada vez y ejecutar la consulta de nuevo, el contenido se borra.
Es decir, la primera vez obtiene 684, 688, 689, 691 y 695.
La segunda vez, analiza el 684, pero cuando vuelve no puede seguir con el 688 ya que los datos se han perdido.
¿Alguna idea sobre cómo abordar el problema?