Dein virtuelles Filesystem heißt bei mir Gliederung. Die anderen Fragen hast du noch nicht beantwortet. Üblich ist eine selbstrekursive Tabelle für die Gliederung (Outline). Dazu würde ich dann eine Tabelle Reports verwenden, in der jedem (leaf-)node beliebig viele Reports zugeordnet werden können.
Der folgende Code zeigt dir sinngemäß das rekursive Aufbauen einer Gliederung aus einer Tabelle:
Delphi-Quellcode:
const
SEL_NODES
= 'select id, folder, outline_id '
+ 'from outline '
+ 'order by outline_id, folder '
;
SEL_REPORT
= 'select report from reports '
+ 'where outline_id = %d';
function TMainForm.TreeNodes: TTreeNodes;
begin
Result := TreeView.Items;
end;
procedure TMainForm.LoadNodes(nParent: TTreeNode; iParent: integer; recursive: boolean = true);
var
i, id: integer;
folder: string;
bm: TBookmark;
n: TTreeNode;
begin
with QOutline do
begin
if Locate('outline_id', iParent, []) then
while FieldValues['outline_id'].AsInteger = iParent do
begin
id := FieldValues['id'].AsInteger;
n := TreeNodes.AddChildObject(nParent, folder, Pointer(id));
if recursive then begin
bm := GetBookmark;
LoadNodes(n, id, recursive);
GotoBookmark(bm);
FreeBookmark(bm);
end;
Next;
end;
end;
end;
procedure TMainForm.miLoadClick(Sender: TObject);
begin
// QOutline.SQL.Text := SEL_NODES;
// QOutline.Open;
LoadNodes(nil, 0);
// QOutline.Close;
end;
Jetzt wäre interessant zu wissen, ob du deine Reports als Unterknoten im Baum visualisieren willst, oder lieber bei einer Knotenart (folder) bleibst und die reports in einer ListView anzeigst (explorer style - mein Favorit).
marabu