AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FetchAll mit Filter und SetRange
Thema durchsuchen
Ansicht
Themen-Optionen

FetchAll mit Filter und SetRange

Ein Thema von Edelfix · begonnen am 14. Mär 2025 · letzter Beitrag vom 15. Mär 2025
Antwort Antwort
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
225 Beiträge
 
Delphi 10.4 Sydney
 
#1

FetchAll mit Filter und SetRange

  Alt 14. Mär 2025, 12:07
Datenbank: MariaDB • Version: 10.5.11 • Zugriff über: MyDac
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?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#2

AW: FetchAll mit Filter und SetRange

  Alt 14. Mär 2025, 12:26
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 von Edelfix:
Oder sollte ab einer gewissen Anzahl von Daten generell eine Query genutzt werden?
Ja!

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.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
225 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: FetchAll mit Filter und SetRange

  Alt 14. Mär 2025, 13:23
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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#4

AW: FetchAll mit Filter und SetRange

  Alt 14. Mär 2025, 14:14
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.
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
616 Beiträge
 
Delphi XE6 Enterprise
 
#5

AW: FetchAll mit Filter und SetRange

  Alt 14. Mär 2025, 18:12
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.
Für MariaDB/MySQL muss die MyDAC Bibliothek emulieren, was ADS von Haus aus kann: ISAM-Zugriff.

Btw. Benutzt Ihr den ADS Server oder die lokale Version?
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
774 Beiträge
 
#6

AW: FetchAll mit Filter und SetRange

  Alt 15. Mär 2025, 10:34
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.
Also wenn man die Kombination Firebird, FireDAC und Server-Cursor verwendet und einen Filter vorm Öffnen der Tabelle setzt, werden nur die benötigten Daten geholt. Die Table-Komponente verhält sich da also wie eine Query mit Where-Bedingung...

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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 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