| Autor |
Beitrag |
rob87
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mo 15.12.08 12:14
Hallo,
ich habe folgendes Problem. Ich dachte mal, dass es am Besten zum Bereich "Datenbank" passt. Ich will mit einem SQL gleichzeitig die Ergebnismenge und die Anzahl der in dieser Ergebnismenge enthaltenen Datensätze bekommen. Geht das?
SQL-Anweisung 1: 2: 3:
| select id, wert1, wert2 from tabelle1 where wert2 = 'xyz' order by id desc |
Eine ganz einfache SQL-Abfrage mit einem JOIN und einer order-by-Klausel liefert mir eine Ergebnismenge x. und ich will nun noch wissen, wieviele DS darin enthalten sind. Ich dacht des ginge vll. so:
SQL-Anweisung 1: 2: 3: 4:
| select count(*) as Anzahl, id, wert1, wert2 from tabelle1 where wert2 = 'xyz' group by id, wert1, wert2 order by id desc |
Aber dann erhalte ich jeweils die Anzahl an Datensätze für die einzelnen Gruppierungen. Und die group-Klausel weglassen geht ja auch ned?? Rein syntaxmäßig.
PlanB wär halt ein zweites SQL-Statement zur Counter-Ermittlung. 
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 15.12.08 12:27
Probier es mal so:
SQL-Anweisung 1: 2: 3: 4: 5: 6: 7: 8:
| SELECT id, wert1, wert2, 1 AS RF FROM tabelle1 WHERE wert2 = 'xyz' UNION SELECT COUNT(*), NULL, NULL, 2 AS RF FROM tabelle1 WHERE wert2 = 'xyz' ORDER BY RF ASC, id DESC |
Damit müsste in der letzten Zeile die Anzahl stehen.
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mo 15.12.08 12:33
DeddyH hat folgendes geschrieben : | Probier es mal so:
SQL-Anweisung 1: 2: 3: 4: 5: 6: 7: 8:
| SELECT id, wert1, wert2, 1 AS RF FROM tabelle1 WHERE wert2 = 'xyz' UNION SELECT COUNT(*), NULL, NULL, 2 AS RF FROM tabelle1 WHERE wert2 = 'xyz' ORDER BY RF ASC, id DESC |
Damit müsste in der letzten Zeile die Anzahl stehen. |
OK. Hab des nun mit einem einfachen Statement getestet. Nun hab ich in der letzten Spalte als Name RF und bei den Datensätzen den Wert 1 und bei der Summe den Wert2. Des passt eigentlich soweit. Auch wenn ich mir erst noch der Syntax mächtig werden muss.
Der Begriff Union is mir neu. Werd mal nachforschen, was des is und dann versuchen diese Struktur auf meine Abfrage zu übertragen.
Aber danke schonmal
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 15.12.08 12:43
In diesem Thread gab es eine ähnliche Anforderung, dort habe ich es auch erklärt: http://www.delphiforum.de/viewtopic.php?t=86920&start=0&postorder=asc
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mo 15.12.08 13:04
OK. Merci.
Nun noch eine kurze Frage. Wie krieg ich nun mein Ergebniswert am Einfachsten in eine INT-Variable?? *g*
Ich kann ja wohl schlecht sagen:
Delphi-Quelltext 1:
| count := SQL1.GetValue(1); |
Also doch 2 SQL-Statements? 
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 15.12.08 13:08
Geh doch einfach mit Last auf den letzten Datensatz und lies das erste Feld aus 
|
|
Agawain
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Mo 15.12.08 13:23
Moin,
wenn Du den Wert nicht in der Ergebnismenge brauchst, kannst Du auch einfach Tdataset.recordcount auslesen 
_________________ Gruß Aga
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mo 15.12.08 14:00
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 15.12.08 14:12
Dann bliebe noch die Möglichkeit, die Sortierung nach dem künstlichen Reihenfolgefeld (RF) umzudrehen und den ersten Datensatz auszulesen.
|
|
Agawain
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Mo 15.12.08 14:18
hm
kann eigentlich kaum sein, es sei denn, sie ist nicht von TDataset abgeleitet.
RecordCount ist keine Methode, sondern ein nur Lese-Eigenschaft von TDataset.
Wüßte auch nicht, warum man der Kompo das klauen sollte.
_________________ Gruß Aga
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mo 15.12.08 14:22
Agawain hat folgendes geschrieben : | hm
kann eigentlich kaum sein, es sei denn, sie ist nicht von TDataset abgeleitet.
RecordCount ist keine Methode, sondern ein nur Lese-Eigenschaft von TDataset.
Wüßte auch nicht, warum man der Kompo das klauen sollte. |
Ja, stimmt. Is keine Methode. Sorry *g* Aber in meiner TSQL400-Komponenten hab ich das ned mit drin... Finds auch seltsam.
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mo 15.12.08 14:24
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 15.12.08 14:25
Nach einem Open solltest Du eigentlich automatisch auf dem ersten Datensatz stehen.
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mo 15.12.08 14:34
DeddyH hat folgendes geschrieben : | | Nach einem Open solltest Du eigentlich automatisch auf dem ersten Datensatz stehen. |
Ja. Auch klar.
nur wenn ich ein Open oder ein Active := true mach, dann sitzt er zwar auch nach dem SQL auf dem ersten DS. Aber wenn ich drunter dann eine Variablen-Zuweisung dann nimmt er doch den letzten Datensatz oder? Oder neeee quatsch!
Er "öffnet die Ergebnismenge" und positioniert in an die erste Stelle. Genau, dann müssts passen.
Sorry, mein Denkfehler.
[Edit:]  Fehlermeldungen über Fehlermeldungen *g* Muss des no gscheid zambasteln. *g*
[Edit:] Mit ', 2 as K' beginnende Zeichenkonstante nicht begrenzt. WTF ?? In Delphi gehts ned. Aber auf der Maschine wo die DB liegt gehts. *g*
Zuletzt bearbeitet von rob87 am Mo 15.12.08 14:46, insgesamt 1-mal bearbeitet
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 15.12.08 14:46
Dabei kann ich Dir leider nicht helfen, da ich diese komische Kompo nicht kenne. Eine Google-Suche brachte eine polnische und eine italienische Seite zu Tage, beide Sprachen beherrsche ich nicht 
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Mo 15.12.08 14:48
|
|