Ver Mensaje Individual
  #4  
Antiguo 05-11-2010
Avatar de JoseAntonio
JoseAntonio JoseAntonio is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lima - Ciudad de los Reyes.
Posts: 87
Reputación: 19
JoseAntonio Va por buen camino
Código Delphi [-]
procedure TfrmMain.AgregarNodosHijos(Anodo: TTreeNode; ALevel: Integer; AFather: integer);
  var
  SQLStr: string;
  ADAtaset: TpFibDataset;
  i: integer;
  ACliente: string;
  ADoc: string;
  ANodeRaiz: TTreeNode;
  iCliente: integer;
  iDoc: integer;
  ALote: string;
  iLote: integer;
  ARecNode: PRecNode;
  iEstado: integer;
begin
  if ALevel = 1 then begin
    SQLStr := 'SELECT * FROM CLIENTES order by COD_CLIENTE';
    ADataset:= Dm.GetNewDataset(SQLStr);
    for i:= 0 to ADataset.recordCount -1 do begin
      ACliente := ADataset.fieldbyName('RAZONSOCIAL').AsString;
      iCliente := ADataset.fieldbyName('cod_cliente').asInteger;
      ANodeRaiz:= tree.Items.AddChild(ANodo, IntToStr(iCliente) + '-' + ACliente);
      //ANodo.StateIndex:= 0;
      ANodeRaiz.ImageIndex := 3;
      ANodeRaiz.SelectedIndex := 3;
      ANodeRaiz.Data:= TObject(iCliente);
      if ALevel <>  3 then
        AgregarNodosHijos(ANodeRaiz, ALevel +1, icliente);
      ADataset.next;
    end;
    dm.freeDataset(ADataset);
  end
  else if ALevel = 2 then begin
    SQLStr := 'SELECT * FROM DOCUMENTOS where cod_cliente = ' + InttoStr(AFather) + ' ORDER BY COD_DOCUMENTO ';
    ADataset:= Dm.GetNewDataset(SQLStr);
    for i:= 0 to ADataset.recordCount -1 do begin
      ADoc := ADataset.fieldbyName('NOM_DOCUMENTO').AsString;
      iDoc := ADataset.fieldbyName('COD_DOCUMENTO').AsInteger;
      ANodeRaiz:= tree.Items.AddChild(ANodo,InttoStr(iDoc) + '-' + ADoc);
      //ANodo.StateIndex:= 0;
      ANodo.ImageIndex:=3;
      ANodeRaiz.ImageIndex:= 4;
      ANodeRaiz.SelectedIndex:= 4;
      ANodeRaiz.Data:= TObject(iDoc);
      if ALevel <>  3 then
        AgregarNodosHijos(ANodeRaiz, ALevel +1, iDoc);
      ADataset.next;
    end;
    dm.freeDataset(ADataset);
  end

  else if ALevel = 3 then begin
    iCliente := Integer(ANodo.Parent.data);
    IF NOT chbMostBorr.Checked THEN
    SQLStr := 'SELECT * FROM LOTES WHERE COD_CLIENTE = ' +
              IntToStr(iCliente) + ' AND COD_DOCUMENTO =  ' + IntToStr(AFather) +
              ' AND ESTADOLOTE <> -20 ORDER BY COD_LOTE'
     else
    SQLStr := 'SELECT * FROM LOTES WHERE COD_CLIENTE = ' +
              IntToStr(iCliente) + ' AND COD_DOCUMENTO =  ' + IntToStr(AFather) +
              ' ORDER BY COD_LOTE';
    ADataset:= Dm.GetNewDataset(SQLStr);
    for i:= 0 to ADataset.recordCount -1 do begin
      ALote := ADataset.fieldbyName('NOM_LOTE').AsString;
      iLote := Adataset.fieldbyName('COD_LOTE').AsInteger;
      iEstado := Adataset.fieldbyName('ESTADOLOTE').AsInteger;
      ANodeRaiz:= tree.Items.AddChild(ANodo,IntToStr(iLote) + ' - ' + ALote );
      New(ARecNode);
      ARecNode^.Cliente := iCliente;
      ARecNode^.Documento:= Afather;
      ARecNode^.Lote:= iLote;
      ARecNode^.Estado:= iEstado;
      ANodeRaiz.Data:= ARecNode;  // le asigno el codigo de documento

      ANodeRaiz.StateIndex:= 0;            0
      ANodeRaiz.ImageIndex:=0;
      ANodeRaiz.SelectedIndex:=1;
 
      ADataset.next;
    end;
    dm.freeDataset(ADataset);
  end;

end;

 
procedure TfrmMain.FreeNodes(ARaiz: TTreeNode);
var
  //ANode: TTreeNode;
  APRecNode: PRecNode;
  i: integer;
begin
  if ARaiz <> nil then begin
    if ARaiz.Level = 3 then begin
      APRecNode := PRecNode(ARaiz.Data);
      Dispose(APRecNode);
      //FreeNodes(ARaiz.getNextSibling);
    end
    else if Araiz.Level = 2 then begin
      for i:= 0 to Araiz.count-1 do
       try
        FreeNodes(ARaiz.Item[i]);
       except
         showmessage(ARaiz.item[i].text);
       end;
    end
    else if ARaiz.Level = 1 then begin
      for i:= 0 to ARaiz.count-1 do
        FreeNodes(ARaiz.Item[i])
    end
    else if ARaiz.Level = 0 then begin
      for i:= 0 to ARaiz.count-1 do
        FreeNodes(ARaiz.Item[i])
    end;
  end;
end;
__________________
nuestro carácter está reflejado en cada línea de código que escribimos.
Responder Con Cita