Avatar billede koonz Nybegynder
03. februar 2001 - 22:55 Der er 3 kommentarer og
1 løsning

Database og TreeView

Er der en smart måde at få en TreeView til at vise en database struktur, eller er det \"hård kodning\" det hele ?
Avatar billede pstric Nybegynder
03. februar 2001 - 23:01 #1
En lille smule hård kodning kommer du nok ikke udenom. Der er jo ikke ret mange der bruger hierarkiske databaser længere, og en tabel passer nu en gang ikke naturligt ind i en træstruktur.
Avatar billede martinlind Nybegynder
04. februar 2001 - 12:43 #2
du kan med fordel bruge onExpand event\'en.

så starter du med tabeler i level 0, og så field\'s i level 1 osv.

/Martin
Avatar billede koonz Nybegynder
04. februar 2001 - 16:31 #3
Martin
Skal det så laves via sql eller ? - Gider du præcicere lidt ?
Avatar billede martinlind Nybegynder
04. februar 2001 - 17:24 #4
I virkeligheden ret enkelt, her er lidt fra noget jeg lavede for nogle år siden, kig på det, det skulle løsse din problem.


procedure TSQLMain.AddListToTree( AParent : TTreeNode; AList : TStrings; ImgIdx : Integer; EnableChildren : Boolean );
VAR
  Cnt : Integer;
begin
  for Cnt := 0 to AList.Count-1 do
  with DBTreeView.Items.AddChild(AParent,AList[Cnt]) do
  begin
      ImageIndex := ImgIdx;
      HasChildren := EnableChildren;
  end;
end;

procedure TSQLMain.BuildDBTree;
VAR
  L : TStrings;
begin
  Screen.Cursor := crHourGlass;
  DBTreeView.Items.BeginUpdate;
  L := TStringList.Create;
  try
    Session.GetAliasNames(L);
    AddListToTree(NIL,L,0,TRUE);
    finally
      L.Free;
      DBTreeView.Items.EndUpdate;
      Screen.Cursor := crDefault;
  end;
end;

procedure TSQLMain.DBTreeViewExpanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean);
VAR
  L : TStrings;
  BNode : TTreeNode;
begin
  if Node.Level in [0,1] then
  begin
      AllowExpansion := FALSE;
      Screen.Cursor := crHourGlass;
      DBTreeView.Items.BeginUpdate;
      L := TStringList.Create;
      try
        if Node.Level = 0 then
        begin
          Session.GetTableNames(Node.Text,\'\',FALSE,FALSE,L);
          AddListToTree(Node,L,1,TRUE);
        end else
        if Node.Level = 1 then
        with TTable.Create(Self) do
        try
          DataBaseName := Node.Parent.Text;
          TableName := Node.Text;
          GetFieldNames(L);
          BNode := DBTreeView.Items.AddChild(Node,\'Fields\');
          BNode.ImageIndex := 2;
          AddListToTree(BNode,L,3,FALSE);
          GetIndexNames(L);
          BNode := DBTreeView.Items.AddChild(Node,\'Indexes\');
          BNode.ImageIndex := 2;
          AddListToTree(BNode,L,3,FALSE);
          finally
          Free;
        end;
        AllowExpansion := TRUE;
        finally
        L.Free;
        DBTreeView.Items.EndUpdate;
        Screen.Cursor := crDefault;
      end;
  end;
end;

/Martin
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester