Entwickler-Ecke

Datenbanken - dbGrid - Scrollbar


Christian S. - Mo 08.07.02 13:54
Titel: dbGrid - Scrollbar
Hallo! Ich arbeite mich gerade in die Datenbankprogrammierung ein (also Antworten bitte einfach halten!) und bin auf folgendes Problem gestoßen: wenn ich sehr viele Datensätze (> 1000) über ein SQL-Query abfragen und in einem dbGrid anzeigen will, so hat der Scrollbar des dbGrid trotz der Menge an Zeilen nur ganze 3 Positionen (oben, mitte, unten), was eine gute Navigation für den Benutzer so gut wie unmöglich macht.

Wie kann ich dieses Problem lösen?


Pit - Mo 08.07.02 17:44
Titel: Re: dbGrid - Scrollbar


Christian S. - Mo 08.07.02 18:24
Titel: Re: dbGrid - Scrollbar
Pit hat folgendes geschrieben:

TDataSet.IsSequenced muß True sein, dazu muß TDataSet.RecordCount die Anzahl der Datensätze enthalten und TDataSet.RecNo muß die aktuelle Datensatznummer enthalten, die Reihenfolge der Datensatznummern muß aufsteigendend sein und darf keine Lücken enthalten. Nur wenn das erfüllt ist kann das TDBGrid mehr als 3 Zustände anzeigen, was es dann auch macht.


Hi!
Danke für die Hilfe. Welche Datenbanken und Komponeneten in Delphi würden denn diese Bedingungen erfüllen?

MfG,Peter


Alfons-G - Di 09.07.02 10:53

Das hängt in erster Linie davon ab, wie Du in Deinem speziellen Fall auf Deine Daten zugreifst, und wie Pit geschrieben hat, wie sie aufgebaut sind.
Bei gefilterten Daten hast Du z.B. immer Lücken in den Datensatznummern.
Wenn Du statt eines Filters eine SQL-Abfrage mit einer Where-Bedingung verwendest, solltes Du allerdings durchgehende Datensatznummern bekommen. Zumindest Oracle liefert dann fortlaufende Nummern, bei MS SQL weis ich es nicht auswendig.
:idea:
Eventuell musst Du noch nach dem Einlesen mit DataSet.Last ans Ende der Datenmenge springen, damit die Gesamtzahl bekannt ist.
:!:
Beachte allerdings:
Das Einlesen großer Datenbestände in Grids sollte man nur machen, wenn es keine andere Alternative dazu gibt. Du verzichtest dadurch auf die Vorteile einer Server-Datenbank, wie. z.B. geringe Netzbelastung.

:)


Christian S. - Di 09.07.02 15:13

Hi!

Ich greife auf gar keinen Server zu, das Programm soll auf Einzelplatzrechnern laufen. Ich verwende für das Speichern der Daten momentan dbf-Dateien, weil das die einzigen sind, die ich mit SQL während der Laufzeit des Programmes einfach erstellen konnte.

Die Dateien dürfen in beliebigen Verzeichnissen liegen und werden vom Benutzer geöffnet oder erstellt. Wichtig ist auch, dass pro Relation (die Daten werden jeweils nur in einer Relation gespeichert) nur eine Datei erstellt wird, damit es für den Benutzer nicht zu kompliziert wird.

Wie man andere Datenbanktypen mit SQL während der Laufzeit erstellt, weiß ich nicht so genau. CREATE TABLE "name.dbf" ... hat bisher immer gereicht. Kann man sowas mit Oracle auch anstellen? Brauche ich da noch irgendwelche zusätzlichen Treiber? Wenn ja, wo bekomme ich die her?

Ich benutze zum Auslesen der Daten ausschließlich das Delphi-SQL-Query, weil damit Filtern und Sortieren so schön einfach wird.

MfG,
Peter


Alfons-G - Di 09.07.02 16:26

Hmmm, mit dbf-Dateien habe ich schon seit Jahren nichts mehr gemacht :roll:

Um das Problem einzugrenzen, kannst Du zweierlei versuchen:
Mit Last ans Ende und danach sofort wieder mit First an den Anfang springen. Dann sind alle Datensätze eingelesen und die BDE kann das Grid einteilen.
Verwende als Datenmenge mal probeweise TTable, wenn da der Scrollbalken funktioniert, liegt das Problem bei der Query. Bei dbf-Dateien kann dann unter Umständen ein Index auf die Such- und Sortierkriterien helfen.

Ich hatte allerdings mal ein nicht nachvollziehbares Problem mit einen DBGrid, bei welchem auch nur die drei Positionen angezeigt wurden. Nachdem ich das Grid durch ein ExRxDBGrid (von alex Soft, benötigt die Rx-Library, bei Torry erhältlich), ersetzt hatte, funktionierte alles.

:)


Christian S. - Di 09.07.02 19:00

Hallo!

Habe das Problem gelöst, indem ich jetzt ein ADOQuery verwende. Musste mich nur durch diese Sache mit dem ConnectionString durchmogeln. Jetzt funktioniert der Scrollbar perfekt. Trotzdem danke für die Mühe.

MfG,
Peter

P.S.:Werde mir dieses andere Grid trotzdem mal anschauen...