Witam,
używam Lazarusa w aktualnej wersji. Mam problem z komponentem ZedDBTreeView - wykrzacza mi program kiedy ma do wyświetlenia tylko jeden element.
Dane pobieram z bazy danych Firebird 1.5 używając standardowych komponentów jakie są dostarczone z Lazarusem.
Baza wygląda następująco:
id | pid | name |
---|---|---|
1 | null | obiekt |
2 | 1 | węzeł |
3 | 1 | węzeł |
I w takiej postaci drzewo generuje się prawidłowo. Jeśli nie mam w tabeli żadnych rekordów, program nadal działa bez zarzutu. Jednak jeśli w bazie posiadam jedynie jeden rekord np.: |
id | pid | name |
---|---|---|
1 | null | obiekt |
to niestety wyrzuca mi błąd w zeddbtreeview.pas (linia 572) czyli ta zaraz po 'try': |
procedure TZedDBTreeView.CheckAppend;
var
Node : TZedTreeNode;
begin
if (DatasetAvailable) and ((FTextDataLink.DataSet.RecordCount - Self.Items.Count) = 1) then
begin
Self.BeginUpdate;
try
Node := Self.Items.AddNewChild(GetNodeByID(FParentDataLink.Field.AsInteger), FTextDataLink.Field.AsString);
Node.ID := FTextDataLink.DataSet.FieldByName(FIDField).AsInteger;
Node.ParentID := FParentDataLink.Field.AsInteger;
finally
Self.EndUpdate;
end;
end;
end;
Jeśli baza jest zapełniona danymi to nie ma problemu żeby na niej operować. Problem występuje jeśli treeview będzie miał do dyspozycji tylko jeden rekord.
dodanie znacznika <code class="delphi"> i tabelek - fp