Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ayuda LLenar DBTreeView con un Query (https://www.clubdelphi.com/foros/showthread.php?t=56932)

enecumene 31-05-2008 18:28:52

Ayuda LLenar TreeView con un Query
 
Saludos compañeros, pues aquí regreso con una novatada, necesito llenar un DBTreeview con una consulta SQL de la siguiente manera:

Cita:

Departamento
----Empleado 1
----Empleado 2
----Empleado 3
Departamento 2
----Empleado 1
----Empleado 2
Las Tablas departamentos y empleados están relacionadas por un campo ID.

esta es la consulta que estoy haciendo (estoy seguro que esta mal):

Código SQL [-]
select * from DEPARTAMENTO,EMPLEADOS where EMPLEADOS.DPTOID =  DEPARTAMENTO.DPTOID

estoy trabajando con Delphi7 y Firebird 2.0

Saludos.

PD: esta la primera vez que trabajo con esos tipos de componentes ya sea TreeView, ListView, etc., etc. :o

enecumene 01-06-2008 04:23:27

Bueno pude lograr el cometido, pero en vez de usar DBTreeView decidí usar el TreeView, me di cuenta que era muy engorroso, pues aquí va como lo hice:

Código Delphi [-]
Var
  I,CampoCount:Integer;
  Nodo:Packed Array[0..99] of TTreenode;
  NodoValor:Packed array[0..99] of Variant;
begin
  TreeView1.Items.Clear;
  ZDptos.First;
  CampoCount:=ZDptos.FieldCount;
  While not ZDptos.Eof do
  begin
    if NodoValor[0]<> ZDptos.Fields[0].Value then
      Nodo[0]:=TreeView1.Items.Add(nil,Vartostr(ZDptos.Fields[0].Value));
    for I:=1 to ZDptos.FieldCount-1 do
    begin
      if NodoValor[i]<> ZDptos.Fields[i].Value then
        Nodo[i]:=TreeView1.Items.AddChild(Nodo[I-1],Vartostr(ZDptos.Fields[i].Value));
                                Nodo[i].Data := pointer(ZDptos.FieldByName('ID').AsInteger);
      NodoValor[i]:=ZDptos.Fields[i].Value;
    end;
    NodoValor[0]:=ZDptos.Fields[0].Value;
    ZDptos.next;
  end;

Pero me deja un feo arbol de la siguiente manera:

Cita:

+ Departamento 1
-----+ Empleado
---------ID
+ Departamento 2
-----+ Empleado
---------ID
-----+ Empleado
---------ID
¿Cómo puedo ocultar el SubNodo de Empleado (ID)?

Esta es la consulta:

Código SQL [-]
select DEPARTAMENTO.DPTO, EMPLEADOS.NOMBRE, EMPLEADOS.ID from EMPLEADOS, DEPARTAMENTO  where EMPLEADOS.DPTOID = DEPARTAMENTO.DPTOID group by DEPARTAMENTO.DPTO, EMPLEADOS.NOMBRE, EMPLEADOS.ID


Saludos.

enecumene 01-06-2008 16:02:16

Lo último que he estado haciendo es lo sisguiente:

Código Delphi [-]
TTreeView(Nodo[i]).Visible := False

¿Resultado?:

Cita:

---------------------------
Debugger Exception Notification
---------------------------
Project TimerPunchAdmin.exe raised exception class EAbstractError with message 'Abstract Error'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
A ver, quién me echa una mano, ¿Por favor? :o.

Saludos.

enecumene 01-06-2008 16:29:14

Bueno, creo que lo conseguí, pero no sé es la mejor forma, pero ahí va:

Código Delphi [-]
Var
    I,CampoCount:Integer;
    Nodo:Packed Array[0..99] of TTreenode;
    NodoValor:Packed array[0..99] of Variant;
begin
    TreeView1.Items.Clear;
    ZDptos.First;
    CampoCount:=ZDptos.FieldCount;
    While not ZDptos.Eof do
    begin
        if NodoValor[0]<> ZDptos.Fields[0].Value then
            Nodo[0]:=TreeView1.Items.Add(nil,Vartostr(ZDptos.Fields[0].Value));
        for I:=1 to ZDptos.FieldCount-1 do
        begin
            if NodoValor[i]<> ZDptos.Fields[i].Value then
                Nodo[i]:=TreeView1.Items.AddChild(Nodo[I-1],Vartostr(ZDptos.Fields[i].Value));
        Nodo[i].Data := pointer(ZDptos.FieldByName('ID').AsInteger);
//esto fue lo que agregue//
      if Nodo[i].Level = 2 then
        begin
          Nodo[i].Delete;
        end;
//esto fue lo que agregue
              NodoValor[i]:=ZDptos.Fields[i].Value;
        end;
        NodoValor[0]:=ZDptos.Fields[0].Value;
        ZDptos.next;
    end;

lo que hace que borra el tercer nivel del arbol que era ID, de todos modos que alguien me de su comentario, se lo agradecería mucho ;).

Saludos.


La franja horaria es GMT +2. Ahora son las 05:21:33.

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