Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Hilfe zu VirtualTreeview Rootnodecount (https://www.delphipraxis.net/103013-hilfe-zu-virtualtreeview-rootnodecount.html)

Assertor 8. Nov 2007 11:56


Hilfe zu VirtualTreeview Rootnodecount
 
Hi,

ich brauch mal kurz etwas Schützenhilfe, stehe etwas auf dem Schlauch beim VST.

Ich muß ein VST "Live" updaten. Ich erhalte von meinem DBMS immer die aktuelle Anzahl Record (RecordCount). Die DB wird extern geändert, also kann ich keine DB-Events nutzen.

Wie kann ich nun einfach das VST RootNodeCount gegen RecordCount prüfen und das VST -effektiv- updaten. Sprich wenn ich vorher 10000 records hatte und nun 12000, daß er nur die 2000 zufügt bzw. Initialisiert?

Derzeit aktualisiere ich per:
Delphi-Quellcode:
  vstMainGrid.BeginUpdate;
  // vstMainGrid.Clear; // geht auch ohne...
  vstMainGrid.RootNodeCount := GUIMainTable.RecordCount;
  vstMainGrid.SortTree(vstMainGrid.Header.SortColumn, vstMainGrid.Header.SortDirection, True);
  vstMainGrid.EndUpdate;
Hier habe ich das Problem, daß bei jedem -ersten- Update ein Eintrag im VST doppelt ist. In der DB ist alles ok.

Wie macht ihr ein Live-Update des VST? Jetzt liegt alles in einem Timer der RootNodeCount <> RecordCount prüft.
Nicht schön (wg. Timer), aber es geht bis auf den doppelten Eintrag.

Gruß winkel79

[edit]Kürzer, Verständler, Besser: Thread 2.0[/edit]

generic 8. Nov 2007 14:53

Re: Hilfe zu VirtualTreeview Rootnodecount
 
Bin gerade dabei ein Applicationserver zu schreiben, welcher auf einen Client einen VST aktuallisieren muss. (datenändern, hinzufügen und löschen)

Der Server erzeugt von seinen Daten eine Art Diff.
Dieses schickt er zum Client.
Der Client durchläuft dann jeden Diffdatensatz, versucht dabei einen Knoten mit der gleich ID zu finden.
Dann ändert er die Daten oder löscht den Knoten.
Ist kein Knoten da, ist es ein neuer Datensatz.

Assertor 8. Nov 2007 15:05

Re: Hilfe zu VirtualTreeview Rootnodecount
 
Hallo generic,

danke für die Antwort.

Zitat:

Zitat von generic
Bin gerade dabei ein Applicationserver zu schreiben, welcher auf einen Client einen VST aktuallisieren muss. (datenändern, hinzufügen und löschen)

Soweit, etwa gleiche Vorgaben.

Zitat:

Zitat von generic
Der Server erzeugt von seinen Daten eine Art Diff.
Dieses schickt er zum Client.
Der Client durchläuft dann jeden Diffdatensatz, versucht dabei einen Knoten mit der gleich ID zu finden.
Dann ändert er die Daten oder löscht den Knoten.
Ist kein Knoten da, ist es ein neuer Datensatz.

Das brauche ich nicht. Die Daten kommen sequentiell, d.h. kenne ich die aktuelle RecordCount Größe, weiß ich, welche fehlen.

Ich teste gerade einen anderen Lösungsansatz, bekomme aber hier mit dem OnInitNode Probleme.

Wie kann man das anders machen:
Delphi-Quellcode:
var
  Data: PMyData;
begin
  inherited;
  Data := Sender.GetNodeData(Node);
  Initialize(Data^);
  Data.ID := MeineTabelle.FieldByName('MeineID').AsInteger;
  Data.Text := MeineTabelle.FieldByName('MeinText').AsWideString;
  if not MeineTabelle.Eof then // <- das möchte ich ablösen
    MeineTabelle.Next; // <- "" - ""
end;
Ich habe versucht, einfach MeineTabelle.RecNo auf Node.Index zu setzen (mit Größenprüfung) und Eof/Next wegzulassen. Dann erhalte ich bei Vergrößerung des RootNodeCount von z.B. 2000 auf 2500 aber nur gleiche Werte von 2001 bis 2500.

Ideen? Ich habe schon im VTV Tut, den DB Beispielen (Extensive und Basic), den Yahoo Archiven und bei DP gesucht. Aber diesen Ansatz scheint keiner vorher mal gemacht zu haben...

Gruß winkel79

Assertor 8. Nov 2007 15:55

Re: Hilfe zu VirtualTreeview Rootnodecount
 
So, selbst gelöst...

Einfach das OnInitNode wie beschrieben angepasst. Statt Eof/Next auf den selected Record und mit RangeCheck. Dazu das Clear vom VST weg und es rennt sehr schnell.

Trotzdem danke.

Gruß winkel79


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz