![]() |
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 |
Re: Dublikate ausblenden
Gruppiere nach Kunde und Anlagetyp
|
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 |
Re: Dublikate ausblenden
Per SQL (GROUP BY)
|
Re: Dublikate ausblenden
damit kann ich doch aber nur sortieren lassen die einträge bleiben doch in der List
|
Re: Dublikate ausblenden
Du darfst ORDER BY und GROUP BY nicht verwechseln. GROUP BY fasst Datensätze zusammen.
|
Re: Dublikate ausblenden
Stimmt habe ich verwechselt
ich probiers Mal Danke |
Re: Dublikate ausblenden
Ich bekomme nur die Meldung das mit * nich gruppiert werden kann
hier den Code:
Delphi-Quellcode:
kannst du einen Fehler entdecken?
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; |
Re: Dublikate ausblenden
Welche Felder brauchst Du denn genau?
|
Re: Dublikate ausblenden
Bei einer Gruppierung dürfen nur Felder vorkomen, nach denen Ggruppiert wird oder die als Aggregat vorliegen SUM, MAX, MIN, ...)
|
Re: Dublikate ausblenden
Und alle Nicht-Aggregat-Felder müssen in der group by-Klausel auftauchen.
|
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. |
Re: Dublikate ausblenden
Könntest du nicht einfach DISTINCT verwenden,
um die doppelten Einträge herauszufiltern? Gruß Pfoto |
Re: Dublikate ausblenden
AFAIK ist DISTINCT unperformanter als eine Gruppierung, ich kann mich aber auch irren.
|
Re: Dublikate ausblenden
es funktioniert zudem nur wenn die Datensätze komplett übereinstimmen.
|
Re: Dublikate ausblenden
nein leider nicht ich bekomme die Fehlermeldung Syntaxfehler(fehlender Operator)
Code:
Delphi-Quellcode:
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
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; |
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?
|
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. |
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 |
Re: Dublikate ausblenden
Da bekomme ich nur die Fehlermeldung Syntaxfehler in der FROM-Klausel
|
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 |
Re: Dublikate ausblenden
Hallo Leute,
wenn Access 2003 ein Subselect unterstützt, dann würde ich es so machen:
SQL-Code:
Freundliche Grüße
SELECT MaTyp FROM AnlagenTyp WHERE Typ_Id IN (SELECT Typ_ID FROM Anlagen WHERE Kunden_ID = :Kunden_Id)
|
Re: Dublikate ausblenden
es wird wohl nicht unterstützt fehlermeldung ist für mindetens einen erfordelichen Parameter ist kein Wert angegeben.
|
Re: Dublikate ausblenden
Das ist kein Hinweis auf eine fehlende SubSelect-Unterstützung, sonder soll dich daran erinnern den Parameter 'Kunden_ID' zu besetzen ...
|
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] |
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:
bekomme ich den gleichen Fehler
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; |
Re: Dublikate ausblenden
ADO ist immer noch nicht meine Welt, aber...
Delphi-Quellcode:
Does it work?
Parameters.ParamByName('Kunden_ID').Value := 1;
|
Re: Dublikate ausblenden
Auch so kann er keinen Wert finden selbe Fehlermeldung
|
Re: Dublikate ausblenden
Dann kann ich Dir nicht weiterhelfen, ich habe kein Access zum Ausprobieren.
|
Re: Dublikate ausblenden
:lol: So klappt es
SQL-Code:
Danke für eure Antworten
'SELECT * FROM Anlagentyp WHERE Typ_ID IN (SELECT Typ_ID FROM Anlagen WHERE Kunden_ID=:Kunden_ID)'
:hello: |
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 ;)
|
Re: Dublikate ausblenden
Es ist wohl keine Frage der Selektion, sondern Mirko scheint ein anderes Feld als MaTyp in der erwähnten DBComboBox anzuzeigen.
|
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 |
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