Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ein Query auf drei Grids verteilen (https://www.delphipraxis.net/115093-ein-query-auf-drei-grids-verteilen.html)

Mike_on_Tour 5. Jun 2008 16:30

Datenbank: ADS • Version: 8 • Zugriff über: ADS-Komponenten

Ein Query auf drei Grids verteilen
 
Hallo zusammen,

ich habe ein Query und möchte die Datenmenge auf drei DBGrids aufteilen. Als Kennzeichen für die Aufteilung soll ein Feld in der Datenmenge dienen. Da ich jetzt schon ein paar erfolglose Versuche hinter mir habe, hier die Frage, ob das überhaupt geht.

mfG
Mike

mkinzler 5. Jun 2008 16:37

Re: Ein Query auf drei Grids verteilen
 
Da wäre es ja sinnvoller 3 Queries zu verwenden

Mike_on_Tour 5. Jun 2008 16:59

Re: Ein Query auf drei Grids verteilen
 
Ist das nicht etwas viel Aufwand für eine "einfache" Aufteilung der Daten ?
Könnte man nicht einen Filter auf das DBGrid setzen ?

RavenIV 6. Jun 2008 08:07

Re: Ein Query auf drei Grids verteilen
 
Du kannst dem DBGrid schon irgendwie mitteilen, welche Spalten es anzeigen soll.

Aber das mit den drei Queries finde ich auch besser.

joachimd 6. Jun 2008 08:19

Re: Ein Query auf drei Grids verteilen
 
Zitat:

Zitat von Mike_on_Tour
ich habe ein Query und möchte die Datenmenge auf drei DBGrids aufteilen. Als Kennzeichen für die Aufteilung soll ein Feld in der Datenmenge dienen. Da ich jetzt schon ein paar erfolglose Versuche hinter mir habe, hier die Frage, ob das überhaupt geht.

Eine vertikale Aufteilung bekommst du relativ einfach hin, indem du auf dem Grid mit einem Doppelklick in die Feldliste gehst und nur ein paar Felder davon auswählst.
So wie ich dein Posting aber verstehe, willst du eine horizontale Aufteilung (keine Selektion der Felder, sondern der Datensätze) anhand des Inhaltes eines der Felder!? In diesem Fall folge dem Rat der anderen und schreib 3 Queries.

Nachtrag: Du kannst auf eine AdsQuery auch einen Filter anlegen, aber das betrifft dann alle drei Grids gleichermaßen. Ein Grid kann nicht filtern, nur die zugrundeliegende Datenmenge.

Mike_on_Tour 6. Jun 2008 08:32

Re: Ein Query auf drei Grids verteilen
 
Zitat:

Zitat von RavenIV
Du kannst dem DBGrid schon irgendwie mitteilen, welche Spalten es anzeigen soll.

Du meinst sicherlich "Zeilen" ?

Zitat:

Zitat von joachimd
So wie ich dein Posting aber verstehe, willst du eine horizontale Aufteilung (keine Selektion der Felder, sondern der Datensätze) anhand des Inhaltes eines der Felder!?

Genau SO hatte ich das vor.

Zitat:

Zitat von joachimd
Du kannst auf eine AdsQuery auch einen Filter anlegen, aber das betrifft dann alle drei Grids gleichermaßen. Ein Grid kann nicht filtern, nur die zugrundeliegende Datenmenge.

Ja, das habe ich auch ausprobiert, aber der Filter gilt dann auch für alle Grids.

Meine Lösung sieht jetzt so aus: Ich habe das EINE Query und durchlaufe die gesamte Datenmenge (WHILE ...). In einer Spalte der Datenmenge steht ein Wert. In Abhängigkeit von diesem Wert befülle ich dann drei StringGrids. Da die Daten nur angezeigt werden sollen, ist das sicher einfacher, als drei fast gleiche Queries mit drei anhängenden DBGrids und drei DataSources zu verwenden. Man stelle sich mal vor, ich müßte die SQL-Abfrage (so etwa 100 Zeilen mit Parameter und Unions) ändern. So habe ich nur eine Änderung statt drei zu machen.

Mike

RavenIV 6. Jun 2008 08:34

Re: Ein Query auf drei Grids verteilen
 
Richtig.
StringGrid selber befüllen ist auch ne gute Alternative.

alzaimar 6. Jun 2008 09:45

Re: Ein Query auf drei Grids verteilen
 
How to cook drei Grids aus einer Query.

1x query
3x TProvider (an die query beppseln)
3x TClientDataset (mit individuellen filtern)

3x Tdatasource an die TClientDatasets
3x TDBGrid an die TDatasourcen

Tipp: Die Reihenfolge, wie man die Clientdatasets und die Query öffnet und schließt ist entscheidend. WEnn man zur Designzeit damit rumspielt, immer wieder die TClientdatasets per Rechte-Maus-Taste leeren (Clear Data oder so)

3 Queries wären zwar einfacher, aber wenn die Query an sich schon aufwändig ist, ist meine Lösung performanter.

joachimd 6. Jun 2008 10:04

Re: Ein Query auf drei Grids verteilen
 
Zitat:

Zitat von Mike_on_Tour
Meine Lösung sieht jetzt so aus: Ich habe das EINE Query und durchlaufe die gesamte Datenmenge (WHILE ...). In einer Spalte der Datenmenge steht ein Wert. In Abhängigkeit von diesem Wert befülle ich dann drei StringGrids. Da die Daten nur angezeigt werden sollen, ist das sicher einfacher, als drei fast gleiche Queries mit drei anhängenden DBGrids und drei DataSources zu verwenden. Man stelle sich mal vor, ich müßte die SQL-Abfrage (so etwa 100 Zeilen mit Parameter und Unions) ändern. So habe ich nur eine Änderung statt drei zu machen.

Sicherlich einfacher in der Anwendung, aber auch performanter? Bei großen Ergebnismengen musst du mit deiner Methode alle Datensätze abholen, bevor du etwas anzeigen kannst. Mit drei Queries siehst du schon was, wenn die ersten 10-20 Datensätze bereit sind. Der Rest wird eh nach Bedarf ermittelt (Ausnahmen bestätigen die Regel).

hoika 6. Jun 2008 12:50

Re: Ein Query auf drei Grids verteilen
 
Hallo,

das mit 100 Zeilen ändern -> grosser Aufwand kann ich nicht so gelten lassen.
Du kannst ja eine CreateQuery(TheQuery: TAbsQuery) schreiben.
Die erzeugt den Query-Text (per SQL.Add) für die 3 Queries.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 Uhr.
Seite 1 von 2  1 2      

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