AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Lazarus TDBGrid Scrol funktion

Lazarus TDBGrid Scrol funktion

Ein Thema von manfred_h · begonnen am 13. Nov 2015 · letzter Beitrag vom 16. Nov 2015
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.268 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Lazarus TDBGrid Scrol funktion

  Alt 15. Nov 2015, 10:10
Ich kann auch nicht ganz nachvollziehen, was Du genau suchst.

Angenommen, Deine Tabelle hat 1Mio Records und 8 Felder (A..H).
In Deinem Grid zeigst Du dann wieviel Felder an?

Ich setze jetzt mal 3 voraus (A..D).

Bei 1Mio Records kannst Du natürlich nicht alle abrufen und lokal speichern.
Also muss das Grid und der Datenbanktreiber das irgendwie stückchenweise nachladen.

Wenn Du beim Scrollen immer Daten sehen willst müssen die immer schnell nachgeladen werden, was aber dennoch etwas dauert.
Entsprechend wird das Scrollen etwas haken. Das ist aber dann nicht vermeidbar.

Oder der Datenbanktreiber weiß schon mal, dass es 1Mio Records gibt und Du kannst Dich in der Datenmenge frei bewegen, wobei scheinbar 1Mio Einträge verfügbar sind und das Scrollen flüssig funktioniert.
Dann sind aber die Zellen u.U. zunächst noch leer, weil die Daten gar nicht so schnell abgerufen werden können wie das Neuzeichnen wegen dem Scrollen es eigentlich verlangen würde. Dann müssen die Daten nachträglich abgerufen und in die Zellen geschrieben werden.
(Mit dem Weg arbeite ich im Moment.)

Ein Dritter Weg fällt mir nicht ein.

Beim Abrufen der Daten macht es aber wenig Unterschied, ob Du jetzt nur die sichtbaren Daten A-D abholst oder alle Felder von A-H (außer wenn große Binärfelder o.ä. vorliegen). Im Regelfall ist es besser, eine größere Datenmenge abzurufen, als viele kleine.


Ich kann jetzt nicht erkennen, welches Problem Du hast.
Dein Grid stellt (wie auch immer das organisiert ist) die Felder A-D dar. Die Daten müssen also abgerufen werden.

Wann willst Du jetzt welche Teildaten noch auf Klick abrufen? Hast Du sehr viele DBEdits noch neben dem Grid?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: Lazarus TDBGrid Scrol funktion

  Alt 15. Nov 2015, 10:51
Es geht hier wohl darum, dass beim Scrollen mit der Scrollbar/Mausrad in einem TDBGrid sich auch der aktuelle Datensatz ändert. Das gewünschte Verhalten wäre analog zu einer ListView, dort wird der aktuelle Eintrag durch explizites Anklicken desselben gesetzt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.268 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Lazarus TDBGrid Scrol funktion

  Alt 15. Nov 2015, 11:04
Ok, das hätte aber mit dem Traffic wenig zu tun.

Wenn man in den Mio Records scrollt und der aktuelle Datensatz bleibt auf dem ersten stehen, müssen ja trotzdem die Daten der hinteren Datensätze geladen werden um diese anzeigen zu können.

Aber jetzt verstehe ich das. Die gebunden Edits sollen beim scrollen noch nicht aktualisiert werden - erst beim Anklicken einer Zelle im Grid.

Dazu kann ich nichts sagen. Wenn es keine passende Option dafür gibt, wird eine eigene Lösung sicher aufwendig.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#14

AW: Lazarus TDBGrid Scrol funktion

  Alt 15. Nov 2015, 11:43
Aber jetzt verstehe ich das. Die gebunden Edits sollen beim scrollen noch nicht aktualisiert werden - erst beim Anklicken einer Zelle im Grid.
Dazu kann ich nichts sagen. Wenn es keine passende Option dafür gibt, wird eine eigene Lösung sicher aufwendig.
Das ist nicht wirklich aufwendig: In AfterScroll der Datenmenge werden die Edits befüllt bzw. deren Befüllung angestoßen. Man darf dann eben keine DBEdits nehmen. Oder man nimmt DBEdits und arbeitet mit zwei Datasets: Dann wird im AfterScroll der ersten Datenmenge der gesuchte Datensatz der zweiten Datenmenge lokalisiert. Ist aber alles eher ungewöhnlich und dient nicht dem vom TE angegebenen Zweck, den Traffic übers Internet zu verringern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: Lazarus TDBGrid Scrol funktion

  Alt 15. Nov 2015, 13:37
Generell muss man sagen, dass die Beschreibung etwas vage ist. Hier sollte der TE doch bitte etwas konkreter werden.

Ich kann nur im Nebel stochern und vermuten, dass es sich hier um ein "Master-Detail" Konstrukt handelt.
Das Master-DataSet holt die Daten für das Grid (nur die relevanten Felder für die Grid-Anzeige) und das Detail-DataSet lädt den gesamten Datensatz (alle Felder).

Bewegt man sich nun im Master von einem Datensatz zum anderen, dann wird auch das Detail-Dataset aktualisiert.

Diese Bewegung im Master soll nun auf ein Minimum reduziert werden, bzw. nur dann erfolgen, wenn im Grid eine Zeile explizit ausgewählt wird.

Bei einem TDBGrid löst allerdings die Verwendung des Mausrads auch ein Bewegen des Datensatz aus und damit ein Aktualisieren des Detail-Dataset und erzeugt somit den angesprochenen Traffic.

Das war jetzt Lesen im Kaffeesatz und es wäre freundlich vom TE hier etwas mehr Informationen zu geben.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#16

AW: Lazarus TDBGrid Scrol funktion

  Alt 16. Nov 2015, 09:32
Guten Morgen
Danke für Deine ausführlichen Erläuterungen.
Du erklärst es föllig korrekt und verständlich.

Mein Fehler war das ich das ganze nicht komplett erklärt habe. Ich wollte die Fragestellung vereinfachen, war wohl ein Schuss in den Ofen...
Es sind noch 2x Master Detail Beziehungen daran geknüpft...
Diese werden dann natürlich auch beim Datensatzwechsel nachgeladen...

Es war mein Versäumnisse dies nicht von Anfang an zu erwähnen. Sorry..
Vermutlich kannst Du meine Überlegungen nachvollziehen..
Das mit dem fetch all muss ich wirklich noch testen.(dann natürlich nur für die erste query)

Werde das ganze nochmals überdenken..
Shalom Manfred
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#17

AW: Lazarus TDBGrid Scrol funktion

  Alt 16. Nov 2015, 14:55
An alle die hier im Kaffeesatz lesen mussten, Sorry nochmal, war über das Wochenende nicht am Laptop.

@Sir Rufo: Das ist es, habe mich versucht im letzten Post zu Entschuldigen....
Zitat:
Ich kann nur im Nebel stochern und vermuten, dass es sich hier um ein "Master-Detail" Konstrukt handelt.
Das Master-DataSet holt die Daten für das Grid (nur die relevanten Felder für die Grid-Anzeige) und das Detail-DataSet lädt den gesamten Datensatz (alle Felder).

Bewegt man sich nun im Master von einem Datensatz zum anderen, dann wird auch das Detail-Dataset aktualisiert.

Diese Bewegung im Master soll nun auf ein Minimum reduziert werden, bzw. nur dann erfolgen, wenn im Grid eine Zeile explizit ausgewählt wird.

Bei einem TDBGrid löst allerdings die Verwendung des Mausrads auch ein Bewegen des Datensatz aus und damit ein Aktualisieren des Detail-Dataset und erzeugt somit den angesprochenen Traffic.

Die TKDBGrid Komponente wird vermutlich wie schon von Perlsau vorgeschlagen eine ~Fetsch all Funktion plus der Möglichkeit das beim Scrolling der Datensatz-Zeiger nicht bewegt wird..
Dieses verhalten hätte ich gerne mit dem standard DGGrid erledigt.
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#18

AW: Lazarus TDBGrid Scrol funktion

  Alt 16. Nov 2015, 15:59
...
beim Scrolling der Datensatz-Zeiger nicht bewegt wird..
Dieses verhalten hätte ich gerne mit dem standard DGGrid erledigt.
Damit der Datensatzzeiger beim Scrollen nicht automatisch bewegt wird müßtest Du nur die Procedure WMVScroll überschreiben.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#19

AW: Lazarus TDBGrid Scrol funktion

  Alt 16. Nov 2015, 16:26
Damit der Datensatzzeiger beim Scrollen nicht automatisch bewegt wird müßtest Du nur die Procedure WMVScroll überschreiben.
Das hört sich interessant an, werde mich mal ein wenig schlau machen. Danke schon mal für den Tipp.

Geändert von manfred_h (16. Nov 2015 um 16:39 Uhr)
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#20

AW: Lazarus TDBGrid Scrol funktion

  Alt 16. Nov 2015, 17:35
Danke Euch allen für die Ideen und nochmals Sorry für die angestiftete Verwirrung.
Habe es momentan so wie auch schon von Perlsau angesprochen umgesetzt.
Ein separates Dataset und dann im DBrid ein ClickEvent:

Delphi-Quellcode:
procedure Tfrm_test.main_dbgridCellClick(Column: TColumn);
begin
     DM.ApplyFilter(dm_test.tbl_test,'((ID = ''' + dm_test.tbl_test_list.Dataset.FieldByName('ID').AsString + ''') )','');
end;
Dies geht nun wirklich schenller und war auch einfach umgesetzt.
Shalom
Manfred
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf