![]() |
Datenbank: mysql • Version: 5.x • Zugriff über: devart
Daten schnell in VST laden
Hi,
wie lade ich am schnellsten mehrere 1.000 Daten in ein VST? Momentan mach ich es über (gekürzt):
Delphi-Quellcode:
Jedoch dauert diese Art extrem lange.
liste.test1:= Query.FieldByName('test1').AsWideString;
Vst.addchild(nil, liste); |
AW: Daten schnell in VST laden
Delphi-Quellcode:
und dann im OnGetText-Event den passenden Text rausgeben. Das wäre eine Möglichkeit.
Vst.RootNodeCount := 10000;
|
AW: Daten schnell in VST laden
Ja, denke wie bei jedem WinControl (z.B. auch StringGrid) bei größeren Datenmengen nichts in das Control laden sondern nur den sichbaren Abschnitt aus der externen Datenquelle laden und bereit stellen.
|
AW: Daten schnell in VST laden
Was soll der Benutzer mit tausend Datensätzen anfangen? Ich wäre da ziemlich überfordert, wenn ich die alle durchsehen müsste, um meine gewünschte Information zu bekommen.
|
AW: Daten schnell in VST laden
Das ist natürlich wahr, aber eben eine der Stärken des VST :P
Die Frage ist auch noch, falls das hier youuu alles nicht so weiterhilft, wie er den Baum befüllt. Von welchem Typ ist das Objekt "liste"? Meine Zeit mit den DB-Komponenten ist lange vorbei... Macht er erst eine Query, iteriert dann über das Ergebnis und fügt jedes Node einzeln hinzu? Der Fehler wird vermutlich sein, dass das virtuelle Paradigma, oder wie man das nennt, hier nicht befolgt wurde. Selbst ein simples VST.Add() geht glaube ich noch recht schnell, auch wenn man es sehr sehr oft hintereinander aufruft. Das RootNodeCount ist aber der bessere Weg, denke ich. Ich würde es mal so versuchen: Query machen, Ergebnis irgendwo merken, RootNodeCount auf die Anzahl der Zeilen im Ergebnis setzen. Im OnGetText-Ereignis dann auf das gecachete Query-Ergebnis zugreifen und den passenden Text rausrücken. Dabei könnte man zum Beispiel den Index des Nodes, für welches OnGetText aufgerufen wird, benutzen, um die passenden Daten aus der Ergebnismenge herauszufischen. Falls das auch noch nicht reicht.. etwas mehr Code, bitte :-D.. und Entschuldigung für meine sehr knappe Antwort von vorhin. Ich musste weg, aber musste trotzdem noch antworten, war so ein innerer Zwang. Gute Nacht. |
AW: Daten schnell in VST laden
Morgen, bin gestern eingepennt :)
Also, ich mach ein Query auf die DB, fülle die Klasse Liste und pack es in das VST.
Delphi-Quellcode:
Query.SQL.Text := 'Query String'
Query.Open; while not Query.eof do Begin Liste := TListe.Create; with Liste do Begin liste.test1:= Query.FieldByName('test1').AsWideString; . . . end; Vst.addchild(nil, Liste); Query.Next; End; |
AW: Daten schnell in VST laden
Hi,
mach doch mal zwei Schleifen, eine, die z.B. ein Array mit den "Liste"-Objekten befüllt, und dann eine, die die Nodes hinzufügt, basierend auf dem Array. Und dann guck mal, welche die meiste Zeit verbraucht. Ich vermute, dass die DB-Sachen dauern, das .Add() aber ganz schnell geht. Und falls nicht, versuch es mal mit dem RootNodeCount, wie oben vorgeschlagen. HTH |
AW: Daten schnell in VST laden
Dann wird aber Zeit gleich bleiben im Endeffekt?
Oder verstehe ich das falsch? |
AW: Daten schnell in VST laden
RootNodeCount auf RecordCount des DataSets setzen und im GetText den Datensatz im Dataset über den NodeIndex referenzieren. Dann wird beim Scrollen durch den VST auch im Dataset gescrollt.
Delphi-Quellcode:
@Luckie: Solch eine pauschale Aussage halte ich für überflüssig, es gibt durchaus Anwendungsfälle, wo man viele Daten präsentiert bekommt. Ob man dann eine weitere Auswertung durchführen kann (über Filter etc) steht auf einem anderen Blatt. 2 Fälle die mir sofort einfallen: 1. Anschauen eines Logs, 2. SQL Tool
ds.Open;
vst.RootNodeCount := ds.RecordCount; ... // Im OnGetText // Setzt vorraus, dass du vorher Columns im VST angelegt hast, // die vom Index genau zu seinen Feldern im Dataset passen // ansonsten einfach nen bestimmtes Feld nehmen if Column > -1 then begin ds.RecNo := Node.Index + 1; CellText := ds.Fields[Column].AsString; end; |
AW: Daten schnell in VST laden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz