Ik had de code wat aangepast zodat ik met 1 knop de Tree kan laden en 1 knop om het te wissen.
Werkt prima, maar als ik hem dan weer laad, dan krijg een een foutmelding in de buildtree.
Enig idee wat het zou kunnen zijn?
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
showtree;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
switchtree.Clear;
end;
procedure TForm1.FormCreate (Sender: TObject);
var
ii: TRomViewerColumns;
begin
dbconnection.Params.Database := '..\..\database.db';
dbconnection.Params.Values['FailIfMissing'] := 'False';
dbconnection.Params.Values['SharedCache'] := 'True';
dbconnection.Open;
FIndex:=tstringlist.Create;
FIndex.Sorted := True;
end;
procedure TForm1.showtree;
begin
SwitchQuery.SQL.Text := 'SELECT * FROM SWITCHDATA';
SwitchQuery.Open;
SwitchQuery.Last;
BuildTree;
FFiltered:=true;
switchTree.RootNodeCount := SwitchQuery.RecordCount;
FillBookmarks();
end;
procedure TForm1.BuildTree;
var
Node : PVirtualNode;
begin
SwitchTree.BeginUpdate;
try
SwitchQuery.First;
while (not SwitchQuery.Eof) do
begin
if SwitchQuery.Fields.FieldByName ('ID').AsString.EndsWith ('000') then
begin
Node := SwitchTree.AddChild(nil, Pointer (SwitchQuery.RecNo));
FIndex.AddObject(SwitchQuery.Fields.FieldByName ('Basename').AsString, TObject(Node));
end;
SwitchQuery.Next;
end;
SwitchQuery.First;
while (not SwitchQuery.Eof) do
begin
if not SwitchQuery.Fields.FieldByName ('ID').AsString.EndsWith ('000') then
begin
Node := SwitchTree.AddChild (NodeWithBaseName (SwitchQuery.Fields.FieldByName ('Basename').AsString), Pointer (SwitchQuery.RecNo)); // hier gaat het fout als ik het voor de 2e keer laad.
FIndex.AddObject(SwitchQuery.Fields.FieldByName ('Basename').AsString, TObject(Node));
end;
SwitchQuery.Next;
end;
finally
SwitchTree.EndUpdate;
end;
end;
Bookmarks