Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid scrolling (https://www.delphipraxis.net/41661-dbgrid-scrolling.html)

Tsunami 6. Mär 2005 19:01

Datenbank: firebird embedded • Version: 1.5.2.4731 • Zugriff über: ZEOS 6.1.5 inkl Patch 2

DBGrid scrolling
 
Programme :
Delpi 7 Pro + Firebird embedded + Zeos

Problem :
Beim Ziehen des Scrollbalkens mit der Maus wird der Inhalt eine TDBGrid
nicht aktualisiert, der Inhalt scrollt also nicht mit.
Erst nach Loslassen der Maustaste wird der Inhalt des Stringgrid aktualisiert.

Frage :
Was muss ich einstellen, damit der Inhalt des TDBGrids auch während des
Scrollens aktualisiert wird oder welches andere Grid oder Listbox etc könnte ich nehemen,
damit diese Aktualisierung sofort erfolgt?

Bei einem TStringGrid währe das die Option GoThumbTracking,
aber die gibt es bei einem TDBGrid nicht, oder doch?

Auch ein OnMouseMove-Ereignis mit DBGrid1.Repaint; funktioniert nicht.

mschaefer 6. Mär 2005 20:27

Re: DBGrid scrolling
 
N´abend,

sorry, da gibt es prinzipbedingt keine Lösung mit TDBGrid. Hintergrund ist, das DBDataset die Daten immer Packetweise anfordert, was für die Datenbankansteurerung auch Sinn macht. Der Haken zeigt sich am DBGrid. Es läd die Datensätze nicht Zeilenweise zu. Der Scrollbalken ist zudem nicht proportional. Kann er auch nicht sein, da das Grid kein Wissen über die gesamte Menge der Abfrage hat und im Dataset diese auch nicht hinterlegt ist, sondern nur die Kriterien nach denemn nachgeladen wird, wenn man an das Ende/den Anfang des aktuellen Pakets kommt.

Eine Lösung wäre eine SQL-Abfrage durchzuführen und die Daten von Hand in ein StringGrid einzulesen. Das kann bei großen Mengen aber zu erheblichen Speicherverbrauch führen und hier ist man daher gehalten diese Maximalmenge über die Query von Hand zu begrenzen und wahrscheinlich vor der eigentlichen Abfrage zunächst ein Datensatztcount laufen zu lassen, um festzustellen wieviel Datensätze man nun zu erwarten hat.

FAZIT: Es ist ein Systemproblem und läßt sich nur auf Umwegen mit deutlichem Aufwand lösen.

Grüße // Martin

Union 6. Mär 2005 20:31

Re: DBGrid scrolling
 
Zitat:

Zitat von mschaefer
N´abend,

sorry, da gibt es prinzipbedingt keine Lösung mit TDBGrid. Hintergrund ist, das DBDataset die Daten immer Packetweise anfordert, was für die Datenbankansteurerung auch Sinn macht. Der Haken zeigt sich am DBGrid. Es läd die Datensätze nicht Zeilenweise zu. Der Scrollbalken ist zudem nicht proportional. Kann er auch nicht sein, da das Grid kein Wissen über die gesamte Menge der Abfrage hat und im Dataset diese auch nicht hinterlegt ist, sondern nur die Kriterien nach denemn nachgeladen wird, wenn man an das Ende/den Anfang des aktuellen Pakets kommt.

Eine Lösung wäre eine SQL-Abfrage durchzuführen und die Daten von Hand in ein StringGrid einzulesen. Das kann bei großen Mengen aber zu erheblichen Speicherverbrauch führen und hier ist man daher gehalten diese Maximalmenge ücer die Query von Hand zu begrenzen und wahrscheinlich vor der eigentlichen Abfrage zunächst ein Datensatztcount laufen lassen, um festzustellen wieviel Datensätze man nun zu erwarten hat.

FAZIT: Es ist ein Systemproblem und läßt sich nur auf Umwegen mit deutlichem Aufwand lösen.

Das stimmt so nicht. Wenn der verwendete TDataSet-Abkömmling bzw. die zugrundeliegende Datenbank sequenzierte DataSets zuläßt, dann kann man durch Setzen der entsprechenden Option im DataSet dies Einschalten und hat eine korrekte proportionale Darstellung des Scrollbalkens. Es werden aber (meist im Hintergund) alle Daten geladen. Die DataSet Komponente sollte dies aber optimal regeln.

mschaefer 6. Mär 2005 21:39

Re: DBGrid scrolling
 
Moin, moin,

Lesen hilft! Unter der Kombination Firebird-Zeos ist das wie ich beschrieben habe. Bei den Filedatenbanken Paradox und DBase gab es meines Erachtens so eine Einstellung wie Du beschrirben hast, bin mir da aber nicht mal sicher. Wenn Du Dich mit den Zeos-Datasets auskennst, wirst Du auch die entsprechende Eigenschaft/Property benennen können wo dies einzustellen ist. Kenne Zeos gut und mir ist da keine Möglichkeit bekannt, aber ein Beispiel würde mich überzeugen...

Grüße // Martin

Union 6. Mär 2005 22:20

Re: DBGrid scrolling
 
Zitat:

Zitat von mschaefer
Moin, moin,

Lesen hilft! Unter der Kombination Firebird-Zeos ist das wie ich beschrieben habe. Bei den Filedatenbanken Paradox und DBase gab es meines Erachtens so eine Einstellung wie Du beschrirben hast, bin mir da aber nicht mal sicher. Wenn Du Dich mit den Zeos-Datasets auskennst, wirst Du auch die entsprechende Eigenschaft/Property benennen können wo dies einzustellen ist. Kenne Zeos gut und mir ist da keine Möglichkeit bekannt, aber ein Beispiel würde mich überzeugen...

Grüße // Martin

Sorry. Sequencing wird wohl erst in Zeos 6.5 realisiert, und das ist momentan noch eine Alpha.

mschaefer 7. Mär 2005 06:54

Re: DBGrid scrolling
 
Moin Union,

dann lass uns mal überraschen wie das nachher läuft.

Grüße // Martin

Tsunami 7. Mär 2005 12:38

Re: DBGrid scrolling
 
Ich seh' schon, ich bin hier genau richtig, um dumme Fragen zu stellen. :thumb:
Eure Antworten helfen mir sehr weiter und ich werde es mal mit einem StringGrid probieren.
Wegen dem Speicherverbrauch hoffe ich, das das Betriebssystem das irgendwie regelt außerdem geht es nur um eine relativ kleine Datenbank mit maximal 10.000-100.000 Einträgen zu je maximal 80 Zeichen für diese Liste. Das wären also maximal 8 MB Speicherverbrauch und das sollte erstmal kein Problem sein,
oder irre ich mich da?

Gibt es eventuell einen besseren Weg, um auf eine Firebird embedded Datenbank zuzugreifen, ohne ZEOS zu benutzen und ohne ein Produkt kaufen zu müssen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 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