Autor Beitrag
butterkeks
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56

Win XP, Win 7
Delphi 2007
BeitragVerfasst: Di 06.07.10 14:39 
Hallo Leute,

ich führe mit einer TSqlQuery eine Abfrage durch die wie folgt lautet:
ausblenden 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 user profile iconNarses: SQL-Tags hinzugefügt

_________________
Dear lord,
please grant me the ability to punch people in the face over Standard TCP/IP!
Niko S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Di 06.07.10 15:20 
Probiers mit
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
2:
Query.Last; 
Query.First;

direkt nach dem Oeffnen
danach sollte der Recordcount stimmen.

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
butterkeks Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 56

Win XP, Win 7
Delphi 2007
BeitragVerfasst: 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"

_________________
Dear lord,
please grant me the ability to punch people in the face over Standard TCP/IP!
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 06.07.10 15:48 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
evtl. liegt das 'fehlerhafte' count daran, das nicht sofort alle Datensaetze aus der DB gefetcht werden. Da hilft gerne mal ein
ausblenden 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:
ausblenden SQL-Anweisung
1:
SELECT count(*) as cnt FROM Kassenbericht...					

Dann hast Du die Anzahl im Feld "cnt" stehen.

Jens

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Di 06.07.10 16:27 
user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:

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 ;) ).

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.