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 ?
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.
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