Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TQuery -> Anzahl Datensätze (https://www.delphipraxis.net/96426-tquery-anzahl-datensaetze.html)

HolgerCW 24. Jul 2007 10:54

Datenbank: ORACLE • Version: 9 • Zugriff über: DATABASE

TQuery -> Anzahl Datensätze
 
Hallo zusammen,

kann man einer TQuery die Anzahl der Datensätze entnehmen, ohne mit Count in SQL zu arbeiten. Habe die TQuery mit einer DataSource an ein DBGrid gekoppelt und würde jetzt gerne wissen, wieviele Datensätze in der DBGrid sind

Gruss

Holger

Bernhard Geyer 24. Jul 2007 10:59

Re: TQuery -> Anzahl Datensätze
 
Einfach zum Ende der Query scrollen.
Oracle weis ja selbst nicht wenn die ersten Datensätze zum Client geliefert werden wieviel Datensätze enthalten sind da ja im Hintergrund u.U. noch die "restlichen" Ergebnissätze bestimmt werden.

HolgerCW 24. Jul 2007 11:07

Re: TQuery -> Anzahl Datensätze
 
Alles klar,

das klappt schon mal, und wie könnte ich jetzt noch die Summe der in Spalte XYZ enthaltenen Werte ermitteln ? (Ohne SQL)

Gruss

Holger

mkinzler 24. Jul 2007 11:24

Re: TQuery -> Anzahl Datensätze
 
Weicht diese Anzahl von der Anzahl der Datensätze ab?

HolgerCW 24. Jul 2007 12:06

Re: TQuery -> Anzahl Datensätze
 
Ja,

es ist ein berechnetes Feld.

Es kann in jedem Datensatz, die Zahl 0 - 10 annehmen.

Gruss

Holger

mkinzler 24. Jul 2007 12:08

Re: TQuery -> Anzahl Datensätze
 
Dann wirst du nicht ohen weitere Abfage auskommen.

HolgerCW 24. Jul 2007 12:41

Re: TQuery -> Anzahl Datensätze
 
Danke für die Hilfe,

dann weiss ich jetzt bescheid und werde weiter TQuerys basteln.

Gruss

Holger

mkinzler 24. Jul 2007 13:01

Re: TQuery -> Anzahl Datensätze
 
Du könntest auch versuchen die benötigten infos dazuzujoinen.

SQL-Code:
select <feldlist>,(select count(<id>) from <tabelle>) as anzahl from <tabelle> ...

Thomas Horstmann 24. Jul 2007 13:15

Re: TQuery -> Anzahl Datensätze
 
Hallo,
recht einfach geht es mit "FetchAll" und "RecordCount":

Delphi-Quellcode:
MyQuery.FetchAll ;
ShowMessage('Anzahl: ' + IntToStr(MyQuery.RecordCount)) ;
Für die Summe am besten SQL oder Schleife (aber recht langsam):

Delphi-Quellcode:
var
iSum : Currrency ;
..
with MyQuery do
  begin
  { Ausgaben deaktivieren, sonst werden die Grids mit "gescrollt" }
  DisableControls ;
  { Zurücksetzen }
  iSum := 0 ;
  { Zum Anfang }
  First ;

  { Schleife, über alle Datensätze }
  while EOF = FALSE do
    begin
    { Addieren }
    iSum := iSum + FieldByName('FieldXYZ').AsCurrency ;
    { Nächster Datensatz }
    Next ;
    end ; // while EOF

  { Ausgaben aktivieren }
  EnableControls ;
  end ; // with MyQuery
Hoffe es hilft.

Viele Grüsse
Thomas

HolgerCW 25. Jul 2007 13:32

Re: TQuery -> Anzahl Datensätze
 
Hi,

danke für die Hilfen.

Die Schleife ist echt zu langsam, da 13.000 Datensätze.

Zitat:

select <feldlist>,(select count(<id>) from <tabelle>) as anzahl from <tabelle> ...
Welche Tabelle würde ich denn für ID angeben, wenn ID ein berechnetes Feld ist ?

Gruss

Holger

mkinzler 25. Jul 2007 14:19

Re: TQuery -> Anzahl Datensätze
 
Zitat:

Welche Tabelle würde ich denn für ID angeben, wenn ID ein berechnetes Feld ist ?
Unter ID meinte ich das Primärschlüsselfeld. Willst du den die Anzahl der datensätze oder anzahl verschiedener Werte einer Spalte?

HolgerCW 25. Jul 2007 14:28

Re: TQuery -> Anzahl Datensätze
 
Ich möchte den Inhalt eines Feld, welches ich DB_ANZAHL genannt habe addieren.

Das Feld DB_ANZAHL, ist ein berechnetes Feld.

Kann ich das Feld DB_ANZAHL in meine Select Abfrage implementieren ?

Dann könnte ich sogar danach sortieren und auch SUM() machen ...

Gruss

Holger

mkinzler 25. Jul 2007 14:44

Re: TQuery -> Anzahl Datensätze
 
Wo wird das Feld berechnet?

HolgerCW 25. Jul 2007 14:59

Re: TQuery -> Anzahl Datensätze
 
In der entsprechenden TQuery in dem Ereignis onCalcFields.

Vorher hatte ich das Feld mit Doppelklick auf die Query und 'Neues Feld' der Query beigefügt.

Gruss

Holger

mkinzler 25. Jul 2007 15:39

Re: TQuery -> Anzahl Datensätze
 
Dann geht es nicht, da zu diesem Zeitpunkt das Feld noch nicht existiert. U.U. könntest du das Feld im Query anlegen.

HolgerCW 25. Jul 2007 16:47

Re: TQuery -> Anzahl Datensätze
 
Nochmal zu deiner Select - Abfrage in der Select Abfrage:

Zitat:

select <feldlist>,(select count(<id>) from <tabelle>) as anzahl from <tabelle> ...
Ich könnte ja die Anzahl auch in der Select Abfrage bestimmen.

Nur wenn ich:

Delphi-Quellcode:
select <feldlist>,(select count(<id>) from <Andere Tabelle>) as anzahl from <tabelle> ..
mache habe ich ja nur die Gesamte Anzahl von der anderen Tabelle.

Ich müsste also so was in der Art bauen:

Delphi-Quellcode:
select <ID, SpalteA, SpalteB>,(select count(<ID>) from <Tabelle 2> WHERE TABELLE1.ID = TABELLE2.ID) as anzahl from <Tabelle 1> ..
Wenn ich das mache dauert die Abfrage aber sehr lange. Kann ich die Berechnung in der Select - Abfrage auch für nur die angezeigten Werte machen ?
So läuft das ja by oncalcfields ...

Gruss

Holger

mkinzler 25. Jul 2007 18:27

Re: TQuery -> Anzahl Datensätze
 
Bei vielen Zeilen würde ich die Abfragen trennen

HolgerCW 26. Jul 2007 09:51

Re: TQuery -> Anzahl Datensätze
 
Was meinst Du genau mit Trennen ?

Jede Abfrage in eine TQuery ...

Also eine für die Gesamt-Anzahl und die andere für die Datensätze ?

Aber wenn ich jetzt, wie in der letzten Abfrage von mir gemacht, die Anzahl für jeden Datensatz berechnet werden soll kann ich die ja schlecht trennen, oder ?

Gruss

Holger

DeddyH 26. Jul 2007 10:02

Re: TQuery -> Anzahl Datensätze
 
Zitat:

Zitat von HolgerCW
Aber wenn ich jetzt, wie in der letzten Abfrage von mir gemacht, die Anzahl für jeden Datensatz berechnet werden soll kann ich die ja schlecht trennen, oder ?

Anzahl je Datensatz? Erklär mal, ich glaube fast, Du musst gruppieren.

HolgerCW 26. Jul 2007 10:20

Re: TQuery -> Anzahl Datensätze
 
Das funktioniert. Mit Anzahl je Datensatz.

Ich schaue in einer anderen Tabelle nach wieviel mal die ID aus Tabelle1 in der anderen Tabelle vorhanden ist.

Da mache ich einen Count drüber und schreibe nun pro ID aus Tabelle 1 die Anzahl der vorkommenden IDs aus Tabelle 2 in eine virtuelle Spalte und zeige dieses an.

Gruss

Holger

DeddyH 26. Jul 2007 10:25

Re: TQuery -> Anzahl Datensätze
 
SQL-Code:
SELECT A.ID, COUNT(B.A_ID) AS Anzahl FROM Tabelle A
LEFT JOIN Tabelle B ON B.A_ID = A.ID
GROUP BY A.ID
Ungetestet

HolgerCW 26. Jul 2007 12:28

Re: TQuery -> Anzahl Datensätze
 
Mit dem Group by klappt es.

Danke

Gruss

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:19 Uhr.

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