Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Anzahl von Datensätzen (https://www.delphipraxis.net/28485-anzahl-von-datensaetzen.html)

muenchner 25. Aug 2004 11:50


Anzahl von Datensätzen
 
Ein Hallo an Alle!

Habe wieder mal ein kleines Problem!
Habe 2 Datenbanken Kunden und Vertrag in beiden ist die Kundennummer enthalten.
Nun möchte ich die Anzahl der Verträge des jeweiligen Kunden abfragen.
Habe eine DBLookupComboBox für die Kunden und eine EBEdit für die Anzahl.
Habe folgenden SQL Code eingegeben.

SELECT KundenNr, COUNT(Zahl) as Anzahl FROM Vertrag
GROUP BY KundenNr

Es wird mir immer nur die Anzahl des 1. Kunden angezeigt, egal welchen Kunden ich anwähle.

Vielleicht kann mir jemand helfen.

Danke im Voraus

Rene :wall:

sepp001 25. Aug 2004 11:52

Re: Anzahl von Datensätzen
 
Hallo,

fehlt da nicht noch eine WHERE-Klausel, die die Kundennummer festlegt, auf die abgefragt werden soll?

Ciao,
sepp_001

Nele 25. Aug 2004 12:13

Re: Anzahl von Datensätzen
 
Ich würde mir die Abfrage auf die schnelle folgendermaßen denken:

Select Count(*) from Vertrag where KundenNr = "KundenNummer aus DBLookupComboBox"

Dein "Group By" bewirkt, dass pro Kundenummer nur ein Datensatz angezeigt wird und das willst du ja nicht

Hoffe, ich hab hier nichts falsches erzählt ..

Gruß
Nele

muenchner 25. Aug 2004 12:19

Re: Anzahl von Datensätzen
 
Danke für die rasche Antwort!

Habe es mit

SELECT KundenNr, COUNT(Zahl) as Anzahl FROM Vertrag
where KundenNr= Vertrag.KundenNr
GROUP BY KundenNr

versucht. Funktioniert aber auch nicht.
Es werden immer nur die Anzahl des 1. Kunden angezeigt.

Rene

MarkusB 25. Aug 2004 12:45

Re: Anzahl von Datensätzen
 
Moin muenchner!

Versuch bitte das:
Delphi-Quellcode:
  select KundenNr, count(*) as Anzahl
    from Vertrag
group by KundenNr
Viele Grüße
Markus
:gruebel:

muenchner 25. Aug 2004 12:55

Re: Anzahl von Datensätzen
 
Leider fuktioniert es immer noch nicht.
Egal was ich probiere, habe immer nur die Datensätze vom 1. Kunden.

Nele 25. Aug 2004 13:54

Re: Anzahl von Datensätzen
 
lass das "Group by" weg - du willst doch alle Datensätze haben, oder?

Gruß
Nele

MrSpock 25. Aug 2004 14:11

Re: Anzahl von Datensätzen
 
Hallo muenchner,

eine WHERE Klausel ist nicht notwendig und die GROUP BY Klausel muss sein, weil alle Felder die (auch) außerhalb von Aggregatfunktionen genutzt werden in die GROUP Klausel müssen, sobald mindestens eine Aggregatfunktion genutzt wird.

Zeig uns doch bitte einmal die Struktur der Tabelle Vertrag und sage uns mit welcher DB und welchen Kompos du arbeitest.

MarkusB 25. Aug 2004 14:16

Re: Anzahl von Datensätzen
 
Hallo Rene!

Die von mir vorgeschlagene SELECT-Klausel sollte die Anzahl der Datensätze pro KundenNummer aus der Tabelle-Vertrag liefern. Sie ist ziemlich einfach, um nicht zu sagen trivial. Es wundert mich, das sie nicht funktioniert.

Nun würde ich gerne wissen warum? Deswegen möchte ich die Daten in der Tabelle-Vertrag anschauen. Was für eine Datenbank benutzt du? Kannst du die Tabelle (falls sie nicht zu groß ist) oder ein kleinen Auszug hier posten?

@Nele
Zitat:

Zitat von muenchner
Ein Hallo an Alle!

Habe wieder mal ein kleines Problem!
Habe 2 Datenbanken Kunden und Vertrag in beiden ist die Kundennummer enthalten.
Nun möchte ich die Anzahl der Verträge des jeweiligen Kunden abfragen.
Habe eine DBLookupComboBox für die Kunden und eine EBEdit für die Anzahl.
Habe folgenden SQL Code eingegeben.

SELECT KundenNr, COUNT(Zahl) as Anzahl FROM Vertrag
GROUP BY KundenNr

Es wird mir immer nur die Anzahl des 1. Kunden angezeigt, egal welchen Kunden ich anwähle.

Vielleicht kann mir jemand helfen.

Danke im Voraus

Rene :wall:

Viele Grüße
Markus
:gruebel:

muenchner 25. Aug 2004 15:10

Re: Anzahl von Datensätzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
anbei die Datenbank.(Paradox)

Habe nur Daten zum testen eingegeben

MarkusB 25. Aug 2004 15:32

Re: Anzahl von Datensätzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Rene!

Also die Abfrage funktioniert.

Viele Grüße
Markus

:gruebel:

lume96 25. Aug 2004 15:38

Re: Anzahl von Datensätzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab's mal kurz getestet und bei mir funktionieren die verschiedenen SQL-Statements :
SQL-Code:
/*Kommentar*/
select KundenNr,count(*)
from vertrag
group by KundenNr
gibt bei mir 'ne schöne Tabelle :
KundenNr--------count(*)
123-------------1
234-------------2

SQL-Code:
/* Kommentar*/
select count(*) from vertrag where KundenNr='234'
gibt bei mir 'ne schöne Tabelle :
count(*)
2

Das Problem liegt daher eher woanders.

Ich habs mit dem Borland SQL-Explorer durchgespielt, nicht in Delphi.

MfG
Lutz

muenchner 25. Aug 2004 15:56

Re: Anzahl von Datensätzen
 
Das funktioniert bei mir auch!

Habe mich vielleicht verkehrt ausgedrückt.

ich möchte über die DBLookupComboBox einen Kunden anzeigen, und in einem anderen Feld (DBEdit)sollte die Anzahl der Verträge dieses Kundens sein.

Gruss Rene

lume96 25. Aug 2004 16:46

Re: Anzahl von Datensätzen
 
Also, an die DBLookUpComboBox hängst Du 'ne DataSource als ListSource ran, die auf die KundenTabelle zurückgreift.
Als ListField gibst Du den Kundennamen an, als KeyField die KundenNr.

Als nächstes 'ne Query, 'nen Edit und 'nen Button auf den Form.
Den Button_OnClick event wie folgt gestalten :
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
   querystr : string;
begin
Query1.Close;
Query1.SQL.Clear;
querystr := 'select count(*) as Anzahl from Vertrag where KundenNr='''
+ DBLookupComboBox1.KeyValue + '''';
Query1.SQL.Add(querystr);
Query1.Open;
Edit1.Text := (Query1.FieldValues['Anzahl']);
Query1.Close;
end;
Das sollte so erst mal klappen, bleiben zwei Punkte :
1) Den ganzen Query1.open, etc... mit Try...except...end sicherer gestalten
2) Idealerweise müsste der obrige Code eher an einem 'SelectionChange' event der LookupCombo, damit sich das Edit Feld automatisch aktualisiert. Habe leider auf die Schnelle nichts Passendes gefunden.

Da kann Dir sicher jemand aus dem Forum weiterhelfen.

MfG
Lutz

muenchner 25. Aug 2004 18:04

Re: Anzahl von Datensätzen
 
Hallo Lutz!

Super, es funktioniert.
Nochmals herzlichen Dank

mfg

Rene


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz