Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-09-2004
Aztaroth Aztaroth is offline
Miembro
 
Registrado: dic 2003
Ubicación: Matamoros
Posts: 52
Poder: 21
Aztaroth Va por buen camino
Funcion Recursiva

Tengo esta funcion recursiva, en la cual intento llenar un arbol con los numeros de parte y sus componentes (hijos), pero no entra a la recursividad como deberia, alguien puede echarme una manita para solucionar este problem

Ah y otra cosa como demonios se indentan los mensajes en este foro, por que al momento de escribirlo le doy los espacios y lo indento pero cuando lo envio me lo pega todo a la izquierda.

Gracias.

Código Delphi [-]
procedure TForm1.getComponents(padre: String; nodo: TTreeNode; cantidad : integer);
var
  mNodo : TTreeNode;
  boomTable : TQuery;
begin
       boomTable := TQuery.Create(nil);
        boomTable.DatabaseName := 'D:\sof';
       boomTable.SQL.Add('SELECT PNO, CNO, CNAME, SUB, QPA 
                                  FROM "d:\sof\Bomstart.dbf" Bomstart ');

      boomTable.SQL.Add('WHERE PNO = :PADRE  order by CNO');
      boomTable.ParamByName('PADRE').Value := padre;
      boomTable.Open;
      while not boomTable.Eof do
      begin
          mNodo := arbol.Items.AddChild(nodo, boomTable.Fields[1].Value);
          if boomTable.FieldByName('SUB').AsInteger = 3 then
          begin
          getComponents(boomTable.FieldByName('CNO').AsString  ,  
                                    mNodo, cantidad);      
     end
     else
     begin
       AsignaValores( boomTable.fieldByName('CNO').AsString, cantidad *  
                            boomTable.FieldByName('QPA').AsInteger);
     end;

     boomTable.Next;
   end;
  boomTable.Close;
  boomTable.Free;
end;

Última edición por roman fecha: 09-09-2004 a las 17:11:28.
Responder Con Cita
  #2  
Antiguo 09-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Aztaroth
Ah y otra cosa como demonios se indentan los mensajes en este foro, por que al momento de escribirlo le doy los espacios y lo indento pero cuando lo envio me lo pega todo a la izquierda.
He editado tu mensaje para que veas como se indenta el código. Sólo tienes que usar la etiqueta [delphi] que, además, te colorea en automático el texto. Si entras a editar el mensaje verás cómo la puse.

// Saludos
Responder Con Cita
  #3  
Antiguo 09-09-2004
Aztaroth Aztaroth is offline
Miembro
 
Registrado: dic 2003
Ubicación: Matamoros
Posts: 52
Poder: 21
Aztaroth Va por buen camino
Funcion Recursiva

Ah ok, esa no me la sabia, gracias roman.
Responder Con Cita
  #4  
Antiguo 09-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
He mirado un rato tu código y no veo a primera vista qué error pueda tener aunque tampoco especificas con precisión qué es lo que falla.

Pero por otra parte en lo personal yo no llenaría el árbol de esta forma. Si la tabla es grande puede tardarse una eternidad.

Puedes usar el árbol en modo "virtual": cuando agregas un nodo le asignas true a su propiedad HasChildren pero no lees los hijos. Con esto logras que aparezca el [+] a la izquierda del nodo pero sin realmente tener hijos.

El evento OnExpanding del árbol se genera cuando el usuario intenta expandir el nodo. En este evento es cuando insertas los hijos del nodo tomando sus datos de la base.

De esta manera mejoras el rendimiento ya que vas a traer de la base los datos que realmente se requieran- aquellos que el usuario explícitamente solicite al intentar expandir un nodo.

// Saludos
Responder Con Cita
  #5  
Antiguo 09-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Cita:
Empezado por Aztaroth
pero no entra a la recursividad como deberia
¿Que significa exactamente esto? ¿algun mensaje de error? ¿al compilar? ¿al ejecutar?

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 09-09-2004
walace_soy walace_soy is offline
Miembro
 
Registrado: may 2003
Ubicación: La Laguna (Tenerife)
Posts: 88
Poder: 22
walace_soy Va por buen camino
recursividad??

Hola que tal?, espero poder ayudarte aunque me parece que no porque no se mucho de programación y vamos imagino que lo que voy a decirte te parecera una tonteria.

Esto es lo que haces tu:

boomTable := TQuery.Create(nil);
boomTable.DatabaseName := 'D:\sof';
boomTable.SQL.Add('SELECT PNO, CNO, CNAME, SUB, QPA
FROM "d:\sof\Bomstart.dbf" Bomstart ');

boomTable.SQL.Add('WHERE PNO = :PADRE order by CNO');
boomTable.ParamByName('PADRE').Value := padre;
boomTable.Open;
while not boomTable.Eof do
begin
mNodo := arbol.Items.AddChild(nodo, boomTable.Fields[1].Value);
if boomTable.FieldByName('SUB').AsInteger = 3 then
begin
getComponents(boomTable.FieldByName('CNO').AsString ,
mNodo, cantidad);
end
No se exactamente lo que es CNO, pero si es lo que yo pienso, en que momento le dices que te de la información del siguiente padre?. Repito no soy muy bueno en esto de pensar asi que no te podre ayudar mucho, pero vamos sino le pasas el siguiente padre no podras obtener bien la informacion del siguiente. Pero desconozco que es ese campo.
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 04:33:04.


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