![]() |
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.
|
Cita:
// Saludos |
Funcion Recursiva
Ah ok, esa no me la sabia, gracias roman.
|
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 |
Cita:
:confused: |
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. |
La franja horaria es GMT +2. Ahora son las 05:07:53. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi