AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Tabelle aus PG Datenbank in StringGrid füllen?
Thema durchsuchen
Ansicht
Themen-Optionen

Tabelle aus PG Datenbank in StringGrid füllen?

Ein Thema von W4lt3r · begonnen am 11. Jan 2018 · letzter Beitrag vom 12. Jan 2018
Antwort Antwort
W4lt3r

Registriert seit: 4. Jan 2018
Ort: Ottendorf-Okrilla
12 Beiträge
 
#1

Tabelle aus PG Datenbank in StringGrid füllen?

  Alt 11. Jan 2018, 12:54
Hallo an alle,

ich habe gerade eine große Wissenslücke. Wie es schon im Titel steht muss ich einen StringGrid befühlen mit Inhalten aus einer Datenbank. Ich hab mich jetzt zu StringGrid belesen. Aber nichts gefunden was mir wirklich helfen würde. Meine erster Ansatz wäre eine Schleife die die Inhalte befüllt und das StringGrid automatisch erweitert. Allerdings bin ich mir nicht mal im klaren, ob das über Haupt ein guter Ansatz, geschweige den der richtige ist.

Wenn ihr eine Idee zu dem Thema hättet oder wenigstens ein Hinweis in welche Richtung ich suchen muss, würde das mir schon sehr viel bringen.

Schon mal Danke für alle Beiträge.

W4lt3r
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: Tabelle aus PG Datenbank in StringGrid füllen?

  Alt 11. Jan 2018, 12:59
Muss es denn unbedingt ein StringGrid sein? Wenn man keine datensensitiven Controls (z.B. DBGrid) verwenden darf/soll/möchte, würde ich eher in Richtung ListView mit ViewStyle vsReport tendieren. Mit der Schleife hast Du schon recht, und für das dynamische Einfügen von Zeilen finde ich ganz persönlich die ListView etwas eleganter.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
W4lt3r

Registriert seit: 4. Jan 2018
Ort: Ottendorf-Okrilla
12 Beiträge
 
#3

AW: Tabelle aus PG Datenbank in StringGrid füllen?

  Alt 11. Jan 2018, 13:05
Ich will kein DBGrid verwenden weil es um Tabellen geht die über 5 mio. Datensätze enthalten und dabei reicht der Arbeitsspeicher nicht. Und nun ja mir wurde gesagt das ich StringGrid benutzen soll.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

AW: Tabelle aus PG Datenbank in StringGrid füllen?

  Alt 11. Jan 2018, 13:07
Das hat aber doch weniger mit der Darstellungskomponente zu tun als damit, wie man das zugrundeliegende Dataset konfiguriert. Welcher Mensch will denn auf einen Schlag 5.000.000 Datensätze angezeigt bekommen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.555 Beiträge
 
Delphi 7 Professional
 
#5

AW: Tabelle aus PG Datenbank in StringGrid füllen?

  Alt 11. Jan 2018, 13:40
Die Menge der Daten ist bei 'nem StringGrid sicherlich ausschlaggebend für den Speicherverbrauch.

Bei 'nem DBGrid wird nur das geladen, was auch angezeigt wird, es sei denn, dass man die Datenbankkomponenten (DataSet und Nachfolger) drum "bittet", alle Datensätze in den Arbeitstspeicher zu laden. Oder z. B. den Datencursor auf den Client legt, der muss dann zwangsweise alle Daten vorhalten, auch ohne Anzeige.

Aber wenn's denn ein StringGrid sein muss:
Delphi-Quellcode:
StringGrid.Cols := DataSet.Fields.Count;
StringGrid.Rows := DataSet.RecordCount;
DataSet.First;
while not DataSet.EoF do begin
  for i := 0 to StringGrid.Cols - 1 do StringGrid.Cells[i, DataSet.RecNo] := DataSet.Fields[i].AsString;
  DataSet.Next;
end;
Die Sinnhaftigkeit dieses Vorgehens bei genannter Datenmenge, zweifle ich allerdings an.

Ein DBGrid zeigt übrigens "nur" die bereits im DataSet befindlichen Daten an, bei einem StringGrid muss man von den Daten noch 'ne Kopie anlegen (Cells[x,y] := Feldinhalt).
Was mag letztlich dann mehr Speicher verbrauchen? Nur die Daten, die sowieso schon den Speicher sprengen oder diese Daten plus die Kopie im Stringgrid?

Und beim Stringgrid muss man die Formatierungen (rechts- / linksbündig, je nachdem ob Text oder Zahlen, Nachkommastellen ...) gefälligst selber machen.

Um sowas zu machen, müsste ich schon sehr verzweifelt sein.
Oder eine objektorientierte Applikation schreiben, bei der Anzeige und Datenhaltung streng getrennt sind. Aber das dann sicherlich nicht mit der gleichzeitigen Anzeige von 5.000.000 und mehr Objekten.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Tabelle aus PG Datenbank in StringGrid füllen?

  Alt 11. Jan 2018, 13:47
Ich schätze/hoffe mal, dass die 5 mio hier nur ein Missverständnis in der Nutzung der Komponenten ist. Also auch die Stringgridvariante nur ein "Workaroung" ist, um einen Teil der Daten anzuzeigen.
Geht es dann letztlich um die Anzeige eines Teils der Datenmenge, so können sehr wohl datensensitive Komponenten genutzt werden. Die bekommen dann eben nur eine definierte Menge an Daten geliefert.
Das wäre vielleicht das Gewollte, wenn man davon ausgeht, dass die standard Verwendungsmöglichkeiten dieser Komponenten (noch) nicht bekannt sind.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.338 Beiträge
 
Delphi 12 Athens
 
#7

AW: Tabelle aus PG Datenbank in StringGrid füllen?

  Alt 11. Jan 2018, 13:06
Zitat:
Muss es denn unbedingt ein StringGrid sein? Wenn man keine datensensitiven Controls (z.B. DBGrid) verwenden darf/soll/möchte
Aber wenn es nicht "verboten" ist, dann wäre natülich eine Datensensitive Komponente bestimmt besser einfacher.

[edit]
Beim TStringGrid muß auch alles in den Speicher.
Zwar nicht "dauernd" doppelt (außer eventuell beim Befüllen), also Daten im DataSet und als Kopie im DataController des Grids

Wenn der Speicher das Problem ist, dann würde ich eher in Richtung VirtuelStringTree (nur 1. Ebene, also als Grid) tendieren.



Oder einen passenden Filter+Limit auf die Daten und weniger anzeigen. (siehe nachfolgend DeddyH)

Oder die Anwendung als 64 Bit.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Jan 2018 um 13:11 Uhr)
  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 13:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz