ZedDBTreeView - błąd w przypadku tylko jednego węzła

0

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

0

używaj debuggera, sprawdz ktora linia zwraca błąd

0

Jak już napisałem, błąd jest w kodzie komponentu.

Node := Self.Items.AddNewChild(GetNodeByID(FParentDataLink.Field.AsInteger), FTextDataLink.Field.AsString);

Przygotowałem najprostszą wersję programu i zawsze wywala mi w momencie ładowania danych z jednym tylko rekordem.

0

przyczyn moze byc wiele, byc moze jest to bug lazarusa.
Sporobuj nie wywlywac CheckAppend, jesli jest tylko jeden wiersz pobrany...

1 użytkowników online, w tym zalogowanych: 0, gości: 1