![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() Hola a todos, como estan?, espero me puedan ayudar con el siguiente problema
![]() +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 ![]() ![]() |
#2
|
|||
|
|||
Estimado Diego200519, bienvenido a club delphi...lea la guía de estilo...lo llamaran al orden en breve...
|
#3
|
||||
|
||||
Cita:
![]() Pero sí, no olvides leer nuestra guía de estilo, gracias. Y recuerda usar las etiquetas cuando pongas código, por ejemplo: ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
|||
|
|||
hola!,
intentalo con esta rutina Código:
uses System.Generics.Collections; ... procedure LoadTreeViewFromDataset(TreeView: TTreeView; dataset: TDataSet); var id, parent_id: integer; nombre: string; parentNode, TreeNode: TTreeNode; begin /// genera una lista temporal de indices para acceder a los nodos por su ID with Tdictionary<Integer, TTreeNode>.create do try dataset.First; while not dataset.Eof do begin /// -- Aqui lee los datos de la tabla del nodo que se va a crear id := dataset.FieldByName('id').AsInteger; parent_id := dataset.FieldByName('parent_id').Value; nombre := dataset.FieldByName('nombre').Value; /// --- // comprueba si existe el nodo padre if not TryGetValue(parent_id, parentNode) then parentNode := nil; // genera el nuevo nodo TreeNode := TreeView.Items.AddChild(parentNode, nombre); // inserta un puntero al id de la tabla, por si mas tarde se desea localizar el registro nuevamente TreeNode.Data := pointer(id); // lo inserta en la lista de indices AddOrSetValue(id, TreeNode); dataset.next; end; finally /// Libera la lista de indices free; end; end; procedure TForm2.ButtonLeerTreeViewClick(Sender: TObject); begin try TreeView1.Items.BeginUpdate; FDQuery1.disableControls; if not FDQuery1.active then FDQuery1.open; LoadTreeViewFromDataset(TreeView1, FDQuery1); finally FDQuery1.close; FDQuery1.enableControls; TreeView1.Items.endUpdate; end; end; EJEMPLO:
|
#5
|
|||
|
|||
Buenos días bucanero, me complace decirte que la solución que me has propuesto me funciono
![]() ![]() ![]() |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Llenar TreeView desde una tabla | mRoman | OOP | 12 | 02-06-2020 13:19:01 |
Cargar dbcombobox desde una tabla en mysql | asdberna | Conexión con bases de datos | 4 | 05-04-2013 20:43:06 |
Cargar TActionManager desde TreeView | Neeruu | Varios | 5 | 04-03-2010 17:47:58 |
¿Como guardar una tabla desde el componente shell treeview? | krlox31416 | Varios | 9 | 29-09-2008 02:46:23 |
Cargar un TTreeView desde una tabla | hibero | OOP | 8 | 15-07-2004 19:43:33 |
![]() |
|