Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Dublikate ausblenden (https://www.delphipraxis.net/108267-dublikate-ausblenden.html)

MCOP2001DE 10. Feb 2008 13:47

Datenbank: Access • Version: 2003 • Zugriff über: ADO

Dublikate ausblenden
 
Hallo

Ich habe folgendes Problem.
Ich habe eine Tabelle mit Anlagendaten und eine mit Anlagentypen.
Nun soll über eine Combobox ein Kunde ausgewählt werden und in einer zweiten nur die Anlagentypen angezeigt werden die dieser Kunde auch besitzt das klappt auch.
Nun mein Problem es werden alle Anlagentypen angezeit das heist hat der Kunde zwei oder mehrere Anlagen vom selben Typ so wird dieser Anlagentyp nicht einmal sonder so offt Angezeigt wie der Kunde Anlagenvon dem Typ hat.
Gibt es eine Möglichkeit das mir in der Combobox nur je ein Anlagentyp angezeit wird?

Mirko

mkinzler 10. Feb 2008 13:49

Re: Dublikate ausblenden
 
Gruppiere nach Kunde und Anlagetyp

MCOP2001DE 10. Feb 2008 14:08

Re: Dublikate ausblenden
 
Hallo mkinzler

Danke für die schnelle Antwort.
wie kann ich eine Gruppierung vornehmen.
ich habe schon an Filter gedacht habe aber keine Funktion dafür gefunden.

Mirko

mkinzler 10. Feb 2008 14:09

Re: Dublikate ausblenden
 
Per SQL (GROUP BY)

MCOP2001DE 10. Feb 2008 14:11

Re: Dublikate ausblenden
 
damit kann ich doch aber nur sortieren lassen die einträge bleiben doch in der List

mkinzler 10. Feb 2008 14:13

Re: Dublikate ausblenden
 
Du darfst ORDER BY und GROUP BY nicht verwechseln. GROUP BY fasst Datensätze zusammen.

MCOP2001DE 10. Feb 2008 14:16

Re: Dublikate ausblenden
 
Stimmt habe ich verwechselt
ich probiers Mal

Danke

MCOP2001DE 10. Feb 2008 14:23

Re: Dublikate ausblenden
 
Ich bekomme nur die Meldung das mit * nich gruppiert werden kann
hier den Code:

Delphi-Quellcode:
with Anlagensuche.Anlagentyp do
    begin
      close;
      SQL.Clear;
      SQL.Text := 'select * from Anlagen A, Anlagentyp T where T.Typ_ID = A.Typ_ID and A.Kunden_ID=:Kunden_ID GROUP BY ATyp';
      Parameters.ParamByName('Kunden_ID').Value := DBT_Kunden_ID.Caption;
      open;
    end;
kannst du einen Fehler entdecken?

DeddyH 10. Feb 2008 14:28

Re: Dublikate ausblenden
 
Welche Felder brauchst Du denn genau?

mkinzler 10. Feb 2008 14:29

Re: Dublikate ausblenden
 
Bei einer Gruppierung dürfen nur Felder vorkomen, nach denen Ggruppiert wird oder die als Aggregat vorliegen SUM, MAX, MIN, ...)

DeddyH 10. Feb 2008 14:30

Re: Dublikate ausblenden
 
Und alle Nicht-Aggregat-Felder müssen in der group by-Klausel auftauchen.

MCOP2001DE 10. Feb 2008 14:31

Re: Dublikate ausblenden
 
Ich brauche nur das Feld Atyp aus der Tabelle Anlagentyp.
aber zum sortieren brauche ich auch die Kunden_ID aus der Tabelle Kunden und aus der Tabelle Anlagen die Felder AnlagenTyp_ID und Kunden_ID.

Pfoto 10. Feb 2008 15:36

Re: Dublikate ausblenden
 
Könntest du nicht einfach DISTINCT verwenden,
um die doppelten Einträge herauszufiltern?

Gruß
Pfoto

DeddyH 10. Feb 2008 15:42

Re: Dublikate ausblenden
 
AFAIK ist DISTINCT unperformanter als eine Gruppierung, ich kann mich aber auch irren.

mkinzler 10. Feb 2008 15:49

Re: Dublikate ausblenden
 
es funktioniert zudem nur wenn die Datensätze komplett übereinstimmen.

MCOP2001DE 10. Feb 2008 16:05

Re: Dublikate ausblenden
 
nein leider nicht ich bekomme die Fehlermeldung Syntaxfehler(fehlender Operator)

Code:
Delphi-Quellcode:
with Anlagensuche.Anlagentyp do
    begin
      close;
      SQL.Clear;
      SQL.Text := 'select * from Anlagen where Anlagen.Kunden_ID=:Kunden_ID where EXISTS (select DISTINCT MaTyp, Typ_ID from Anlagentyp where Anlagen.Typ_ID = Anlagentyp.Typ_ID)';
      Parameters.ParamByName('Kunden_ID').Value := DBT_Kunden_ID.Caption;
      open;
    end;
ich muss ja erst die Tabelle Anlagen nach der Kunden_ID durchsuchen und dann aus dem Ergebnis in der Tabelle Anlagentypen die MaTyp(Bezeichnung) suchen lassen und das Ergebnis soll dann Angezeigt werden aber halt nur einmal in der Combobox

DeddyH 10. Feb 2008 16:17

Re: Dublikate ausblenden
 
Du hast 2 mal "where" in der Hauptquery. Außerdem sieht das etwas umständlich aus. Was soll denn nun angezeigt werden? MaTyp?

MCOP2001DE 10. Feb 2008 16:42

Re: Dublikate ausblenden
 
zum besseren verstehen

ich habe folgende Tabellen
Anlagen
Anlagen_ID
Kunden_ID
Typ_ID

Anlagentyp
Typ_ID
MaTyp (Bezeichnung)

Der Kunde wird mit der Combobox Kunden ausgewählt.
nun soll anhand der kunden_ID die Anlagen des Kunden herausgefiltert werden.
mit diesem Ergebnis soll nun aus der Tabelle Anlagentyp nur die MaTypen in der Combobox Anlagentyp angezeigt werden.
Das klappt auch aber wie schon gesagt es werden mir z.B. 10x Trockner angezeigt. Ich möchte aber nur 1x Trockner in der Combobox
stehen haben den das Ergebnis wird dann zum Sortieren den Anlagen weiter genutzt.

DeddyH 10. Feb 2008 16:48

Re: Dublikate ausblenden
 
Wäre da nicht eine DBLookupComboBox der einfachere Weg? Naja, egal, versuch es mal so (nun doch versuchsweise mit distinct):
SQL-Code:
SELECT DISTINCT(T.MaTyp) FROM Anlagentyp T
JOIN Anlagen A ON A.Typ_ID = T.Typ_ID
WHERE A.Kunden_ID = :Kunden_ID

MCOP2001DE 10. Feb 2008 16:53

Re: Dublikate ausblenden
 
Da bekomme ich nur die Fehlermeldung Syntaxfehler in der FROM-Klausel

DeddyH 10. Feb 2008 16:55

Re: Dublikate ausblenden
 
Und so?
SQL-Code:
SELECT DISTINCT(T.MaTyp) FROM Anlagentyp T, Anlagen A
WHERE A.Typ_ID = T.Typ_ID
AND A.Kunden_ID = :Kunden_ID

marabu 10. Feb 2008 16:56

Re: Dublikate ausblenden
 
Hallo Leute,

wenn Access 2003 ein Subselect unterstützt, dann würde ich es so machen:

SQL-Code:
SELECT MaTyp FROM AnlagenTyp WHERE Typ_Id IN (SELECT Typ_ID FROM Anlagen WHERE Kunden_ID = :Kunden_Id)
Freundliche Grüße

MCOP2001DE 10. Feb 2008 17:01

Re: Dublikate ausblenden
 
es wird wohl nicht unterstützt fehlermeldung ist für mindetens einen erfordelichen Parameter ist kein Wert angegeben.

marabu 10. Feb 2008 17:02

Re: Dublikate ausblenden
 
Das ist kein Hinweis auf eine fehlende SubSelect-Unterstützung, sonder soll dich daran erinnern den Parameter 'Kunden_ID' zu besetzen ...

DeddyH 10. Feb 2008 17:03

Re: Dublikate ausblenden
 
Du hast in Access getestet? Falls ja, hast Du auch die Variable :Kunden_ID durch einen echten Wert ersetzt?

[edit] 2 late :? [/edit]

MCOP2001DE 10. Feb 2008 17:11

Re: Dublikate ausblenden
 
in dem Feld DBT_Kunden_ID.Caption ist der Wert gesetzt.
oder kann er ihn nicht zuweisen?

ersetzte ich den Wert so


Delphi-Quellcode:
with Anlagensuche.Anlagentyp do
    begin
      close;
      SQL.Clear;
      SQL.Text := 'SELECT MaTyp FROM AnlagenTyp WHERE Typ_Id IN (SELECT Typ_ID FROM Anlagen WHERE Kunden_ID = :Kunden_Id)';
      Parameters.ParamByName('Kunden_ID').Value := '1';//DBT_Kunden_ID.Caption;
      open;
    end;
bekomme ich den gleichen Fehler

DeddyH 10. Feb 2008 17:15

Re: Dublikate ausblenden
 
ADO ist immer noch nicht meine Welt, aber...
Delphi-Quellcode:
Parameters.ParamByName('Kunden_ID').Value := 1;
Does it work?

MCOP2001DE 10. Feb 2008 17:18

Re: Dublikate ausblenden
 
Auch so kann er keinen Wert finden selbe Fehlermeldung

DeddyH 10. Feb 2008 17:25

Re: Dublikate ausblenden
 
Dann kann ich Dir nicht weiterhelfen, ich habe kein Access zum Ausprobieren.

MCOP2001DE 10. Feb 2008 17:27

Re: Dublikate ausblenden
 
:lol: So klappt es

SQL-Code:
'SELECT * FROM Anlagentyp WHERE Typ_ID IN (SELECT Typ_ID FROM Anlagen WHERE Kunden_ID=:Kunden_ID)'
Danke für eure Antworten

:hello:

DeddyH 10. Feb 2008 17:30

Re: Dublikate ausblenden
 
Du kannst alle Felder auswählen, aber kein einzelnes? Das muss ich nicht verstehen, oder? Naja, sei' s drum, Hauptsache, es funktioniert jetzt ;)

marabu 10. Feb 2008 17:38

Re: Dublikate ausblenden
 
Es ist wohl keine Frage der Selektion, sondern Mirko scheint ein anderes Feld als MaTyp in der erwähnten DBComboBox anzuzeigen.

MCOP2001DE 10. Feb 2008 20:42

Re: Dublikate ausblenden
 
Ja der Fehler war das das Feld nicht MaTyp sondern Ma_Typ heißt mein Fehler.

Danke noch mal für die Hilfe

Mirko

DeddyH 10. Feb 2008 20:44

Re: Dublikate ausblenden
 
Oh Mann, da soll einer drauf kommen, der die DB nicht kennt :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 Uhr.

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