Autor Beitrag
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 08.07.02 13:54 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Mo 08.07.02 17:44 


Zuletzt bearbeitet von Pit am Sa 05.10.02 07:04, insgesamt 1-mal bearbeitet
Christian S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 08.07.02 18:24 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307

Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
BeitragVerfasst: 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.

:)

_________________
Alfons Grünewald
Christian S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307

Win XP Prof, Linux, Win 7
D5 Prof, D7 Architect, D2005 Architect, D2007 Architect
BeitragVerfasst: 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.

:)

_________________
Alfons Grünewald
Christian S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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...