![]() |
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 |
Re: Spalte gruppieren
SQL-Code:
select count(*) from <tabelle> group by gruppe;
|
Re: Spalte gruppieren
SQL-Code:
Meinst Du das?
SELECT gruppe, COUNT(*) AS Anzahl
FROM Tabelle GROUP BY gruppe |
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. |
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.
|
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. |
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. |
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:
Ist nun "Anzahl" vom Typ Integer den ich nun benutzen kann?
Query1.Close;
Query1.sql.Clear; Query1.SQL.Add('SELECT gruppe, COUNT(*) AS Anzahl FROM artdb GROUP BY gruppe'); Query1.Open; :roll: :gruebel: |
Re: Spalte gruppieren
|
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 |
Re: Spalte gruppieren
Kann man auch das Ergebnis zählen,
also wieviele Gruppen gefunden wurden? Denn ich muss ja sicherlich eine Schleife machen die die Ergebnisse durchgeht um alle anzuzeigen.. |
Re: Spalte gruppieren
Im Moment sieht der Spaß so aus:
Delphi-Quellcode:
im memo wird die letzte Gruppe mit der korrekten Anzahl dargestellt.
Query1.Close;
Query1.sql.Clear; Query1.SQL.Add('SELECT gruppe, COUNT(*) AS Anzahl FROM artdb GROUP BY gruppe'); Query1.Open; dbmemo1.Lines.Add(query1.FieldValues['gruppe']+' :'+IntToStr(Query1.fieldbyname('anzahl').AsInteger)); aber eben nur die letzte...nicht alle ergebnisse |
Re: Spalte gruppieren
Kuck dir einfach mal TDataset an... Da gibt es einige interessante Eigenschaften (RecordCount für deinen konkreten Fall z.B.)
|
Re: Spalte gruppieren
nein , ich komm nicht weiter
damit zeigts mir 3mal das gleiche ergebnis:
Delphi-Quellcode:
Query1.Close;
Query1.sql.Clear; Query1.SQL.Add('SELECT gruppe, COUNT(*) AS Anzahl FROM artdb GROUP BY gruppe'); Query1.Open; banz:=query1.RecordCount; for i:=0 to banz -1 do begin dbmemo1.Lines.Add(Query1.fieldbyname('gruppe').AsString+' :'+IntToStr(Query1.fieldbyname('anzahl').AsInteger)); end; |
Re: Spalte gruppieren
Delphi-Quellcode:
Query1.Close;
Query1.sql.Clear; Query1.SQL.Add('SELECT gruppe, COUNT(*) AS Anzahl FROM artdb GROUP BY gruppe'); Query1.Open; Query1.First; //auf ersten Datensatz banz:=query1.RecordCount; //solange noch Sätze vorhanden while not Query1.EOF do begin dbmemo1.Lines.Add(Query1.fieldbyname('gruppe').AsString+' :'+IntToStr(Query1.fieldbyname('anzahl').AsInteger)); Query1.Next; //nächster Datensatz end; {for i:=0 to banz -1 do begin dbmemo1.Lines.Add(Query1.fieldbyname('gruppe').AsString+' :'+IntToStr(Query1.fieldbyname('anzahl').AsInteger));} end; |
Re: Spalte gruppieren
Schwere Geburt
aber jetzt perfekt! Habs sogar verstanden :-) Dank an alle besonders an Deddy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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