AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listeneintrags-Limits unter Firemonkey?

Ein Thema von news2swen · begonnen am 20. Nov 2015 · letzter Beitrag vom 24. Nov 2015
Antwort Antwort
news2swen

Registriert seit: 7. Nov 2008
36 Beiträge
 
Delphi XE4 Enterprise
 
#1

Listeneintrags-Limits unter Firemonkey?

  Alt 20. Nov 2015, 14:56
Hallo

ich habe im Forum nichts dazu gefunden, daher mache ich diesen Thread auf:

Gibt es irgendeine Beschränkung bei der Darstellung von Datensätzen mit Firemonkey?

Mir ist folgendes aufgefallen:
Ich habe ein ADODataset, welches ca 10.000 Datensätze liefert. Dieses Dataset habe ich an ein StringGrid gebunden. Dargestellt werden nur die ersten 2.000 Datensätze, danach ist Schluss.
Das hat mich stutzig gemacht, daher habe ich als nächstes die Datenquelle an einen Listview gebunden, aber auch da das gleiche Ergebnis.

Wie ertüchtige ich die Komponenten, mir die komplette Datenmenge darzustellen?
Swen

Geändert von news2swen (20. Nov 2015 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Listeneintrags-Limits unter Firemonkey?

  Alt 20. Nov 2015, 15:44
Kenne mich damit nicht aus, aber das hier hört sich eher danach an, als wäre es eine Einstellung am Binding als am Control selbst
  Mit Zitat antworten Zitat
news2swen

Registriert seit: 7. Nov 2008
36 Beiträge
 
Delphi XE4 Enterprise
 
#3

AW: Listeneintrags-Limits unter Firemonkey?

  Alt 23. Nov 2015, 08:57
vielen Dank, super Hinweis. Ich habe jetzt die AutoBufferCount-Property des Bindings auf true gestellt, und schon werden alle Daten eingeladen.

Problem ist nur, dass das extrem lang dauert (1Spalte mit 1.000.000 DS) und ein Click auf einen Datensatz in meinem Control dazu führt, dass das Programm erstmal eine reichliche Minute mit sich selbst beschäftigt ist Das war mit der 2000er Grenze nicht der Fall. Ein Teufelskreis
Swen
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Listeneintrags-Limits unter Firemonkey?

  Alt 23. Nov 2015, 22:33
Ich habe leider keine Ahnung von der "typischen" Delphi Datenbankentwicklung und daher auch nicht vom ADODataset und wie das genau mit dem LiveBindings zusammenarbeitet.

Nach Deiner Beschreibung hört sich das aber so an, als ob die Daten tatsächlich in das StringGrid geladen würden.

Egal, welche Datenbank man im Hintergrund verwendet, aber das sollte man grundsätzlich vermeiden, insbesondere bei dieser hohen Anzahl von Datensätzen.

Wenn ich also einige tausende Datensätze in einem FireMonkey-Grid anzeigen möchte, dann verwende ich das TGrid (und nicht das TStringGrid). Denn das Grid hat das so nützliche "OnGetValue" Event, in dem Du das benötigte Datenelement zur Anzeige zur Verfügung stellen kannst:

Delphi-Quellcode:
procedure TForm10.Grid1GetValue(Sender: TObject; const Col, Row: Integer;
  var Value: TValue);
begin
  // Hier mit entsprechenden Bezug auf COL und Row den passenden Inhalt in Value zurückliefern
end;
Nur wenn ein Datenbank-Element also auch tatsächlich angezeigt werden soll, wird eine Dateninformation aus der Datenbank benötigt, daher geht die Anzeige sehr schnell (da macht es dann keinen Unterschied, ob 2.000 oder 2.000.000 Datensätze in der DB sind).

Geändert von Harry Stahl (23. Nov 2015 um 22:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Listeneintrags-Limits unter Firemonkey?

  Alt 24. Nov 2015, 09:39
Problem ist nur, dass das extrem lang dauert (1Spalte mit 1.000.000 DS) und ein Click auf einen Datensatz in meinem Control dazu führt, dass das Programm erstmal eine reichliche Minute mit sich selbst beschäftigt ist Das war mit der 2000er Grenze nicht der Fall. Ein Teufelskreis
Warum um alles in der Welt willst Du auch 1.000.000 Datensätze in ein Grid laden? Kann doch eh keiner sehen?
Wo ist der Sinn?

Ich würde nur 100 laden... und wenn der Benutzer mehr sehen will lade ich die nach...
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Listeneintrags-Limits unter Firemonkey?

  Alt 24. Nov 2015, 11:15
Ich war aber letztes Jahr in einer ähnlichen Situation. Kunde brauchte nur ein billiges Tool was ein paar Dinge aus einer Datenbank anzeigt und Graphen dazu malt.

Erst mit FireMonkey versucht, extrem langsam da erst die gesamte Ergebnismenge vom Server geladen wurde. Mit der VCL waren die Controls anscheinend so intelligent erst nachzuladen wenn man das DBGrid weiter runtergescrollt hat.

Ich kenne mich mit Datenbanken nicht aus und verstehe nicht, was sich mit dem "Cursor" und allem dahinter im Detail abspielt. Aber mit der VCL musste ich mich um so etwas nicht kümmern. So war ich dann auch schnell fertig.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Listeneintrags-Limits unter Firemonkey?

  Alt 24. Nov 2015, 11:22
Ich würde nur 100 laden... und wenn der Benutzer mehr sehen will lade ich die nach...
Das ist natürlich ein sinnvoller Ansatz.
Aber dieses Nachladen sollte m.E. automatisiert im Hintergrund erfolgen, ohne dass der Programmierer (oder alle Programmierer) das individuell selbst regeln müssen.

Man sollte m.E. immer die Möglichkeit haben, beliebige Datenmengen anzuzeigen.

Auch wenn niemand durch 1Mio Records scrollt, könnte man ja eine komplette Tabelle "anzeigen" und dem User dann Möglichkeiten zum Suchen und Filtern anbieten.

Vom Konzept her finde ich das auf jeden Fall anstrebenswert.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Listeneintrags-Limits unter Firemonkey?

  Alt 24. Nov 2015, 12:22
Aber dieses Nachladen sollte m.E. automatisiert im Hintergrund erfolgen, ohne dass der Programmierer (oder alle Programmierer) das individuell selbst regeln müssen.
Ja das macht doch Firedac auch so... oder?

Auch wenn niemand durch 1Mio Records scrollt, könnte man ja eine komplette Tabelle "anzeigen" und dem User dann Möglichkeiten zum Suchen und Filtern anbieten.

Vom Konzept her finde ich das auf jeden Fall anstrebenswert.
Ja aber doch bitte nicht das Grid als Container missbrauchen...

Grundregel Nr.1: Visuelle Componenten stellen Daten da, aber sind nicht die Struktur um die Daten zu halten...

Das gilt nicht nur für ein TEdit sondern für ALLE.

Du willst Suchen und Filtern? Logo... Kein Thema..

Thread starten mit der Suche oder dem Filter "LIMIT 100"...
Ergebnis da? Ab ins Grid...

Im Hintergrund gerne nochmal 100 suchen... Falls der User doch weiter scrollt... Mach er? Bup... Nächsten hundert ins Grid (die 1. Hundert ggf. vergessen) und wieder im Thread hundert laden...

So wird da ein Schuh draus...
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Listeneintrags-Limits unter Firemonkey?

  Alt 24. Nov 2015, 12:32
Ob FireDAC das macht weiß ich nicht. Bei Benutzung der LiveBindings scheint das ja auf jeden Fall nicht bis zum Grid durchzuschlagen.
Aber da habe ich selbst keine Erfahrungen.


Dass Controls nicht als Datenspeicher fungieren sollen ist - denke ich mal - Konsens.


Mit Limit 100 und einer eigenen Buffer-Funktionalität würde ich eben gerade nicht arbeiten wollen. So wird für mich kein Schuh draus.
Ok, für den Enduser ist das dann in Ordnung. Er würde denken, dass er eine riesige Tabelle sieht, in der er sich bewegen und darin suchen und filtern kann.

Aber wenn man diese Lösung in seinen Projekten jeweils selbst realisieren muss, fände ich das eben unschön.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Listeneintrags-Limits unter Firemonkey?

  Alt 24. Nov 2015, 16:39
Aber wenn man diese Lösung in seinen Projekten jeweils selbst realisieren muss, fände ich das eben unschön.
Das klingt so als wäre das der riesen Aufwand...

Ich will mich doch nicht darauf verlassen, dass Datenbank XY, bzw. Datenbank Komponente XY das kann... Ich möchte doch unabhängig bleiben...

Also Wrapper ich doch sowieso erstmal die Komponente.

Dann bauche ich mir eine View... Davon leite ich eine PageableView ab...
Dann einen "Async-Kachel-Loader"...

Zum Schluss gebe ich dem ganzen im Constructor noch mein Wrapper Interface und schon bin ich unabhängig von der verwendetet Komponente und Datenbank.
Das Ganze mache ich 1x und nutze es als IPageableDataview in allen Projekten...
  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 07:54 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