Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Spalte gruppieren (https://www.delphipraxis.net/103648-spalte-gruppieren.html)

Privateer3000 19. Nov 2007 08:57

Datenbank: dbf • Zugriff über: bde

Spalte gruppieren
 
Hallo alle'zsamm,

ich habe leider keinen passenden Thread zu meinem Problem gefunden.
(Oder nicht richtig gesucht ;-) )
Ich möchte einen Rückgabewert der mir sagt wieviele Datensätze
vorhanden, gruppiert nach Inhalt der Spalte 'gruppe'.
Ausserdem, wie sieht der Typ der Rückgabe aus (Stringlist?)
der dazu erforderlich ist?

Besten Dank

mkinzler 19. Nov 2007 08:59

Re: Spalte gruppieren
 
SQL-Code:
select count(*) from <tabelle> group by gruppe;

DeddyH 19. Nov 2007 09:00

Re: Spalte gruppieren
 
SQL-Code:
SELECT gruppe, COUNT(*) AS Anzahl
FROM Tabelle
GROUP BY gruppe
Meinst Du das?

Privateer3000 19. Nov 2007 09:20

Re: Spalte gruppieren
 
Danke Leute,
mein Problem ist der Rückgabewert.
Ich habe keine Ahnung was sql zurückgibt.
Die von euch erwähnten Beispiele müssen
ja verarbeitet werden.

DeddyH 19. Nov 2007 09:23

Re: Spalte gruppieren
 
Pack das SQL als Eigenschaft SQL in eine Query. Diese öffnest Du mit Open und kannst anschließend über z.B. Query.FieldByName('gruppe').AsString auf das Feld Gruppe zugreifen.

Privateer3000 19. Nov 2007 09:29

Re: Spalte gruppieren
 
Danke Deddy
ich hab da ne Blockade,
String ist String wie passen da die Ergebnisse rein
die aus einer Gruppierung resultieren?

Mein gewünschtes Ergebnis soll ja zB so aussehen:
Gruppe 1: 23 (Datensätze)
Gruppe 2: 12 (Datensätze)
egal ob das dann in 'nem Memo oder Grid steht.

Jelly 19. Nov 2007 09:31

Re: Spalte gruppieren
 
Ich glaub Deddy, das war nicht was Privateer meinte.

Prinzipiell kriegst du, wenn du eine TQuery öffnest, eine Datenmenge kompatibel zum Datentyp TDataset zurück. (Siehe OH).
Ein Dataset besteht aus Zeilen und Spalten. Du bist aber immer nur auf einer Zeile positioniert. Dann kann man, wie Deddy korrekt erwähnte, über die Funktion FieldByName des Dataset auf den Wert der angegeben Spalte zurückgreifen. Es wird aber dabei natürlich nur der Wert der aktuell positionierten Zeile zurückgegeben.

Um auf eine andere Zeile zu springen, dafür gibts zum einen die Methoden Next, Prior, First und Last (selbssprechend), zum anderen auch Suchfunktionen wie z.B. Locate, mit der du nach einem Wert einer (oder gar mehreren) Spalten suchen kannst. Wird ein Eintrag gefunden, so wird auf den ersten der gefundenen Eintäge positioniert, und du kannst wieder mit FieldByName auslesen.

Ich hoffe, du kannst jetzt den hellen Punkt am Ende des Tunnels schon erkennen :zwinker:

PS: Übrigens, neben den Methoden des Dataset, kannst du auch noch ein TDataSource an dein Dataset binden (also deine TQuery), und ein DBGrid kannst du dann wiederum an die Datasource binden. Dadurch wird die komplette Ergebnismeng als Grid dargestellt.

Privateer3000 19. Nov 2007 09:56

Re: Spalte gruppieren
 
Danke Jelly,

offen gesagt versteh ich nur Bahnhof
und fahren nur Güterzüge durch
Die Beispiel zu Query & Co in der OH sind ja auch n Witz.
Delphi-Quellcode:
Query1.Close;
Query1.sql.Clear;
Query1.SQL.Add('SELECT gruppe, COUNT(*) AS Anzahl FROM artdb GROUP BY gruppe');
Query1.Open;
Ist nun "Anzahl" vom Typ Integer den ich nun benutzen kann?

:roll: :gruebel:

mkinzler 19. Nov 2007 09:58

Re: Spalte gruppieren
 
http://www.dsdt.info/tutorials/?cat=6

PaulJr 19. Nov 2007 10:03

Re: Spalte gruppieren
 
Hallo Privater3000 :???:

Falls ich Dich richtig verstanden habe:
(…)
„Ich möchte einen Rückgabewert der mir sagt wieviele Datensätze
vorhanden, gruppiert nach Inhalt der Spalte 'gruppe'.
Ausserdem, wie sieht der Typ der Rückgabe aus (Stringlist?)
der dazu erforderlich ist?“
(…)

Falls Du die SQL-Anweisung von DeddyH in einer Query (Namens: Query1) benutzen solltest (Empfohlen) :idea: :

SELECT gruppe, COUNT(*) AS Anzahl
FROM Tabelle
GROUP BY gruppe

Dann bekommst Du die Antwort auf die Frage: „wie viele Datensätze“ z.B. so:

Query1.FieldByName('ANZAHL').AsInteger;

Die Anzahl ist dann von DatenTyp Integer.

Darüberhinaus kannst Du ein Datentyp auch so ausläsen:

Query1.FieldByName('ANZAHL').DataType; // TFieldType

Viele Grüße
PaulJr


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