Entwickler-Ecke
Datenbanken - Ergebnisse iener abfrage zählen
butterkeks - Di 06.07.10 14:39
Titel: Ergebnisse iener abfrage zählen
Hallo Leute,
ich führe mit einer TSqlQuery eine Abfrage durch die wie folgt lautet:
SQL-Anweisung
1:
| SELECT * FROM Kassenbericht WHERE datum = "'+start+'" AND VerkID != "0" GROUP BY VerkID ORDER BY VerkID ASC |
In "start" füge ich ein Datum im Stil von "2010-07-05" ein.
Das Datenbankfeld Datum ist vom Typ DATE.
Ich erhalte dann die von mir gewünschten Ergebnisse aufgelistet.
Jetzt möchte ich wissen wie ich diese Ergebnisse zählen kann. TSqlQuery.recordcount funktioniert nicht bzw. liefert nur 1 zurück obwohl es mehrere Ergebnisse sind was ich auch schon sichergestellt habe.
Ich habe inzwischen auch schon gelesen das es ein Fehler von den MYSQL treibern sein könnte.
Wie kann ich die Ergebnisse also zählen lassen ohne recordcount zu nutzen?
Moderiert von
Narses: SQL-Tags hinzugefügt
Niko S. - Di 06.07.10 15:20
Probiers mit
Quelltext
1:
| SELECT *,count(*) FROM Kassenbericht WHERE datum = "'+start+'" AND VerkID != "0" GROUP BY VerkID ORDER BY VerkID ASC |
Wenn du "count(*)" einzeln ansprechen kannst (wie in PHP z.B.), kannst du damit die Anzahl rausfischen.
Mit TSqlQuery kenn ich mich leider nicht aus.
zuma - Di 06.07.10 15:28
evtl. liegt das 'fehlerhafte' count daran, das nicht sofort alle Datensaetze aus der DB gefetcht werden. Da hilft gerne mal ein
Delphi-Quelltext
1: 2:
| Query.Last; Query.First; |
direkt nach dem Oeffnen
danach sollte der Recordcount stimmen.
butterkeks - Di 06.07.10 15:41
@ Niko: Das bringt leider nicht das was ich will.
Mit deiner Lösung bekomme ich eine Tabelle die so aussieht:
Spalte A | Spalte B | Spalte C | Count
---------------------------------------
bla | bla | bla | 1
bla2 | bla2 | bla2 | 1
bla3 | bla3 | bla3 | 1
ich will aber so etwas:
Spalte A | Spalte B | Spalte C |
--------------------------------
bla | bla | bla |
bla2 | bla2 | bla2 |
bla3 | bla3 | bla3 |
gesamt 3
@ zuma: Hab ich versucht und bekomme die Fehlermeldung das "Diese Operation bei einer unidirektionalen Datenmenge nicht möglich ist"
Nersgatt - Di 06.07.10 15:48
zuma hat folgendes geschrieben : |
evtl. liegt das 'fehlerhafte' count daran, das nicht sofort alle Datensaetze aus der DB gefetcht werden. Da hilft gerne mal ein
Delphi-Quelltext 1: 2:
| Query.Last; Query.First; |
direkt nach dem Oeffnen
danach sollte der Recordcount stimmen. |
Allerdings werden dann auch wirlich die Datensätze vom Server geholt, obwohl man nur die Anzahl wissen möchte. Oder holst Du auch immer gleich den ganzen Kühlschrankinhalt ins Wohnzimmer, wenn Du nur wissen willst, wie viel Bier noch drin ist? :D
Besser den Server zählen lassen:
SQL-Anweisung
1:
| SELECT count(*) as cnt FROM Kassenbericht... |
Dann hast Du die Anzahl im Feld "cnt" stehen.
Jens
zuma - Di 06.07.10 16:27
Nersgatt hat folgendes geschrieben : |
Allerdings werden dann auch wirlich die Datensätze vom Server geholt, obwohl man nur die Anzahl wissen möchte. Oder holst Du auch immer gleich den ganzen Kühlschrankinhalt ins Wohnzimmer, wenn Du nur wissen willst, wie viel Bier noch drin ist? :D
Jens |
is klar jens, allerdings bin ich davon ausgegangen, das er eh alle Datensätze verarbeiten will. Und wenn ich richtig durst hab, ist der Kühlschrank im Wohnzimmer gut aufgehoben (am besten direkt neben dem Sessel) :mrgreen:
@Butterkeks:
Nersgatt's variante ist sicher die beste (aber darauf achten, das du die selbe Bedingung beim zählen und abfragen nutzt ;) ).
BenBE - Di 06.07.10 17:31
Es gibt für MySQL (seit MySQL5) die Möglichkeit, bei LIMIT-Abfragen die Anzahl der Datensätze vom Server zählen zu lassen, die ohne Anwendung von LIMIT zurückgeliefert werden würden. Link dazu hatte ich hier letztens mal im Forum bereits gepostet; könnte den bei Interesse aber auch noch mal kurz raussuchen. Das hat gegenüber der COUNT(*)-Variante den Vorteil, dass man nur einmal die WHERE-Clause abarbeiten lassen muss und die zweite Abfrage nahezu kostenlos vom Server dazu geliefert wird.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!