![]() |
Datenbank: MariaDB • Version: 10.5.11 • Zugriff über: MyDac
FetchAll mit Filter und SetRange
Mich interessiert wie es eigentlich gedacht ist das man mit MyDac Table Komponenten arbeiten soll.
Ab 400.000 und mehr Datensätzen muss "FetchAll" auf false gestellt werden, sonst ist die Anzeige der Daten zu langsam. Sobald ich aber FetchAll auf false stelle ist weder "Filter" noch "SetRange" möglich. Da die Anwendung einfriert. Oder sollte ab einer gewissen Anzahl von Daten generell eine Query genutzt werden? |
AW: FetchAll mit Filter und SetRange
Grundsätzlich halte ich das Laden derart großer Datenmengen für keine besonders gute Lösung. Es belastet die Datenbank, es belastet den Client. Mehrere hundertausend Datensätze kann kein Nutzer am Client sinnvoll bearbeiten.
Wenn FetchAll = false, wird nur eine Teilmenge der Daten vom Server geholt. Der "Rest" erst bei Bedarf. Dieser Bedarf tritt ein, wenn ein Filter gesetzt wird. Dann werden alle Daten benötigt, da der Filter ja auch eine mehr oder weniger große Menge des "Restes" betreffen kann. Das beim Setzen der Filters erforderliche Nachladen der hier ja wohl eher nicht unerheblichen Datenmenge kann dann schonmal etwas dauern. Und wenn die Daten dann da sind, muss die Filterbedingung für jeden Satz geprüft und ggfls. angewandt werden. Und das kann dann schonmal etwas dauern -> Die Anwendung friert ein. Das gilt analog auch für SetRange. Zitat:
In meinen Programmen lade ich grundsätzlich nur die Daten, die für den konkreten Fall benötigt werden. Prophylaktisch einfach mal alle Daten zu laden, frei nach dem Motto: "Es könnte unter Umständen eventuell vielleicht möglich sein, dass von den Daten eventuell unter Umständen vielleicht was benötigt werden könnte oder eben auch nicht." funktioniert bei großen Datenmengen schlicht und einfach nicht. Weder Server noch Client sind damit glücklich (egal wie leistungsfähig die Hardware ist), noch können die Anwender solche Datenmengen sinnvoll verarbeiten, überschauen. Anwender sind für gewöhnlich glücklich damit, nur die Daten zu sehen, die sie für die konkrete Aufgabe benötigen. Und noch glücklicher sind sie, wenn das auch noch schnell geht. |
AW: FetchAll mit Filter und SetRange
Da es mit der ADS Table Komponente kein Problem ist große Datenmengen zu verarbeiten, ist die Komponente anscheinend anders programmiert als die MyDac oder UniDac.
Die ADS Table Komponente zeigt Daten schnell an und kann Filter und Range fix erledigen. Vermutlich ist in der ADS Table Komponente die serverseitige Verarbeitung per Default aktiv. Ich dachte das die MyDac Table Komponente das auch kann, wenn man die entsprechenden Einstellungen aktiviert. |
AW: FetchAll mit Filter und SetRange
Der Advantage Database Server arbeitet eher wie DBase und Paradox. Diese Systeme arbeiten grundsätzlich anders als relationale Datenbanksysteme.
Die von Dir beschriebenen Probleme dürften weniger ihre Ursache in den Delphikomponenten haben, sondern eher im Zusammenhang mit den Unterschieden der Datenbanksystemen stehen. |
AW: FetchAll mit Filter und SetRange
Zitat:
Btw. Benutzt Ihr den ADS Server oder die lokale Version? |
AW: FetchAll mit Filter und SetRange
Zitat:
Wir hatten nämlich auch das Problem, dass wir eine alte BDE-Anwendung migriert haben und da sehr viele Tabellen-Komponenten mit Filter vorhanden waren, die wir nicht alle auf Query umstellen wollten/konnten. |
AW: FetchAll mit Filter und SetRange
Zitat:
1. Man ersetzt in BDE Anwendungen das TTable durch TFDTable 2. Man stellt ein life window ein oder einen server seitigen Lifecurser . Alles sollte funktionieren so lange man nicht auf abfragen von Recordcount angewiesen ist, dann muss man och ein bissichen cleverer sein. 3. Man ersetzt Stück für Stück TTable durch TFDQuery. |
AW: FetchAll mit Filter und SetRange
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 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