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);
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.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;
ANodeRaiz.StateIndex:= 0; 0
ANodeRaiz.ImageIndex:=0;
ANodeRaiz.SelectedIndex:=1;
ADataset.next;
end;
dm.freeDataset(ADataset);
end;
end;
procedure TfrmMain.FreeNodes(ARaiz: TTreeNode);
var
APRecNode: PRecNode;
i: integer;
begin
if ARaiz <> nil then begin
if ARaiz.Level = 3 then begin
APRecNode := PRecNode(ARaiz.Data);
Dispose(APRecNode);
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;