Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-11-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Recursividad. Obtener registros que sirven como nodo hoja.

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?
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Archivos _QSQLXXXX ¿Que son? ¿Para que sirven? ¿Como se crean? Wonni Conexión con bases de datos 2 13-08-2007 09:37:43
Obtener un fichero adjunto a un nodo de un fichero XML muntasil Internet 0 18-07-2006 12:57:57
Como selecionar un nodo de un TTreeView VRO OOP 2 18-05-2005 16:45:24
Como puedo eliminar un nodo de un TTreeVieu didier OOP 1 15-07-2004 19:33:38
FastReport salgan dos registros por hoja cahosoft Impresión 0 13-07-2004 18:13:02


La franja horaria es GMT +2. Ahora son las 06:57:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi