| Autor |
Beitrag |
butterkeks
      
Beiträge: 56
Win XP, Win 7
Delphi 2007
|
Verfasst: Di 06.07.10 14:39
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
_________________ Dear lord,
please grant me the ability to punch people in the face over Standard TCP/IP!
|
|
Niko S.
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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.
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
butterkeks 
      
Beiträge: 56
Win XP, Win 7
Delphi 2007
|
Verfasst: 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
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Di 06.07.10 15:48
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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?
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)
@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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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.
|
|
|