Ver Mensaje Individual
  #1  
Antiguo 24-09-2022
Diego200519 Diego200519 is offline
Registrado
 
Registrado: sep 2022
Posts: 5
Reputación: 0
Diego200519 Va por buen camino
Unhappy Como cargar los un TreeView desde una tabla SQL

Hola a todos, como estan?, espero me puedan ayudar con el siguiente problema , pasa que quiero agregar un TTreeView a mi programa que muestre las instancias y sub instancias de un inventario, es decir, que lo muestre algo así:

+Instancia1
-SubInstancia1.1
-SubInstancia1.2
+Instancia2
-SubInstancia2.1
-SubInstancia2.2

Pero necesito que tome los datos de una tabla la cual esta en SQL, la tabla esta estructurada de la siguiente manera:
CREATE TABLE [dbo].[SAINSTA](
[CodInst] [int] IDENTITY(1,1) NOT NULL,
[InsPadre] [int] NOT NULL,
[Nivel] [int] NOT NULL,
[TipoIns] [smallint] NOT NULL,
[Descrip] [varchar](40) NOT NULL,
[Descto] [decimal](28, 4) NOT NULL,
[DEsComp] [smallint] NOT NULL,
[DEsSeri] [smallint] NOT NULL,
[DEsLote] [smallint] NOT NULL,
[DEsComi] [smallint] NOT NULL,
[DEsCorrel] [smallint] NOT NULL,
[DigitosC] [smallint] NOT NULL,
[DEsTabla] [smallint] NOT NULL,
[CodAlte] [varchar](15) NULL,

Donde Descrip es el nombre de la instancia, InsPadre seria lo que indica el nodo padre de la instancia y CodInst es el codigo individual de cada una, o mejor dicho, el nodo.

He probado usando este codigo que encontre en un foro parecido:
procedure TfPruebaComponentes.FormCreate(Sender: TObject);
var
i,x,n:integer;
Nod : TTreeNode;
NodSuplementario : TTreeNode;
MiPunteroInteger : ^integer;
begin
FDQuery1.Close;
FDQuery1.Open;
FDQuery1.Last;
n:=FDQuery1.RecordCount;
FDQuery1.First;
for x:=0 to (n-1) do
begin
i:=FDQuery1.FieldByName('nodo_padre').AsInteger;
if i=0 then
begin
Nod:=TreeView1.Items.Add (nil,FDQuery1.FieldByName('opc_Descripcion').asstring);
New(MiPunteroInteger);
MiPunteroInteger^:=FDQuery1.Fieldbyname('nodo').asinteger;
nod.Data:=MiPunteroInteger;
nod.Selected :=true;
end
Else
begin
n:=TreeView1.Items.Count-1;
While MiPunteroInteger(TreeView1.Items[n].Data)^ <> i do
Dec(n);
nodSuplementario:=TreeView1.Items.AddChild(TreeView1.Items[N],FDQuery1.FieldByName('opc_Descripcion').asstring);
New(MiPunteroInteger);
MiPunteroInteger^:= FDQuery1.Fieldbyname('nodo').asinteger;
nodSuplementario.Data:=MiPunteroInteger;
Nod.selected:=True;
Nod.Expanded:=False;
end;
FDQuery1.Next;
end;
end;

Pero la verdad no me sirve bien y incluso me marca un error de compilación en el While do .

He estado buscando por mucho y la verdad espero que me lean y me puedan ayudar con este problema muchas gracias .
Responder Con Cita