Autor Beitrag
rob87
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: 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?

ausblenden 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:
ausblenden 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



BeitragVerfasst: Mo 15.12.08 12:27 
Probier es mal so:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mo 15.12.08 12:33 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Probier es mal so:
ausblenden 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mo 15.12.08 13:04 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
In diesem Thread gab es eine ähnliche Anforderung, dort habe ich es auch erklärt: [url=www.delphiforum.de/v...;postorder=asc[/url]

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:
ausblenden Delphi-Quelltext
1:
count := SQL1.GetValue(1); //... where RF = 2 oder so					


Also doch 2 SQL-Statements? :lol:
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 15.12.08 13:08 
Geh doch einfach mit Last auf den letzten Datensatz und lies das erste Feld aus ;)
Agawain
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mo 15.12.08 14:00 
user profile iconAgawain hat folgendes geschrieben Zum zitierten Posting springen:
Moin,

wenn Du den Wert nicht in der Ergebnismenge brauchst, kannst Du auch einfach Tdataset.recordcount auslesen ;-)

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Geh doch einfach mit Last auf den letzten Datensatz und lies das erste Feld aus ;)


Beide Methoden werden von meiner speziellen TSQL-Komponente ned unterstützt.
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 460

win xp
D5, MySQL, devxpress
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mo 15.12.08 14:22 
user profile iconAgawain hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mo 15.12.08 14:24 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
Dann bliebe noch die Möglichkeit, die Sortierung nach dem künstlichen Reihenfolgefeld (RF) umzudrehen und den ersten Datensatz auszulesen.

Daran dacht ich auch schon. Mein Ansatz:

ausblenden Delphi-Quelltext
1:
2:
if SQL1.First then
  counter := StrToInt(SQL1.GetValue(1));  //Vorrausgesetzt natürlich dass, das SQL "richtig rum" sortiert ist.

Nur gibt es bei SQL-Komponente auch keine Methode "First" :roll: :roll:

Is alles ned so einfach *g*
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 15.12.08 14:25 
Nach einem Open solltest Du eigentlich automatisch auf dem ersten Datensatz stehen.
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mo 15.12.08 14:34 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
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:] :lol: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mo 15.12.08 14:48 
user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
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 ;)

Ich weiß. Hab auch schon danach gegoogelt. Aber mein Fehler war, dass in Delphi '' nicht zwei Hochkommas sind, sondern nur eins :D

[Edit:] Basst! Funzt alles! Merci