Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi LookupComboBox mit Bedingung (https://www.delphipraxis.net/70872-lookupcombobox-mit-bedingung.html)

davar 6. Jun 2006 05:28

Datenbank: MySQL • Version: 4.x • Zugriff über: Zeos

LookupComboBox mit Bedingung
 
Hallo Leute,

habe eine Frage zur LookupComboBox:

ich habe eine Tabelle "Kunden", in der die Kundendaten gespeichert sind. Die Komponente "LookupComboBox1" zeigt mir alle Namen der Kunden an - soweit in Ordnung.

In die Methode "OnClick" habe ich die Abfrage von Rechnungen geschrieben. Aus der Tabelle "rechnungen" werden alle Einträge angezeigt, die dem angeklickten Kunden zugeordnet werden (durch die Kundennummer).

Nun möchte ich gerne die Einträge in der LookupComboBox einschränken, so dass nur die Namen der Kunden angezeigt wird, zu denen auch eine Rechnung vorliegt (ein Datensatz in der Tabelle "rechnungen" vorhanden ist). Kann ich das so ohne weiteres machen und wenn ja, wie?

mkinzler 6. Jun 2006 05:44

Re: LookupComboBox mit Bedingung
 
Verwendest du eine LookupComboBox oder eine DBLookupcombobox? Du mußt aber auf jedenfall diese Einschränkung im Query machen (z.B. durch einen Subselect oder Join)

davar 6. Jun 2006 06:13

Re: LookupComboBox mit Bedingung
 
Sorry, es handelt sich um die Komponente TDBLookupComboBox.

Jetzt habe ich die Abfrage umformuliert. Bei

Delphi-Quellcode:
'SELECT kundendaten.*, rechnungen.* FROM kundendaten, rechnungen WHERE kundendaten.kundennummer = rechnungen.kundennummer'
habe ich das Problem, dass der Kundenname in der DBLookupComboBox genauso oft angezeigt wird wie die Anzahl der Rechnungen..


MfG

davar

marabu 6. Jun 2006 06:31

Re: LookupComboBox mit Bedingung
 
Hallo.

Du solltest mit zwei Datasets arbeiten. QR (Rechnungen, SELECT * FROM rechnungen) und QK (Kunden, SELECT * FROM kunden) stehen in einer n:1 Beziehung. Ordne jedem DataSet eine DataSource (DSR, DSK) zu. Die Eigenschaften der DBLookupComboBox setzt du so:

Delphi-Quellcode:
DataField := 'KundenNummer';
DataSource := DSR;
ListSource := DSK
ListField := 'KundenName';
KeyField := 'KundenNummer';
Grüße vom marabu

Edit: KeyField und ListField vertauscht.

davar 6. Jun 2006 07:13

Re: LookupComboBox mit Bedingung
 
Zitat:

Zitat von marabu
Delphi-Quellcode:
DataField := 'KundenNummer';
DataSource := DSR;
KeyField := 'KundenName';
ListField := 'KundenNummer';
ListSource := DSK
Grüße vom marabu

Hallo,

mit den Eigenschaften bekomme ich die Fehlermeldung "Typkonvertierung von Variant ungültig."

Und wenn ich die Eigenschaften ListField und KeyField vertausche, werden alle Namen der Kunden angezeigt, ich kann aber nicht auswählen..

mkinzler 6. Jun 2006 07:25

Re: LookupComboBox mit Bedingung
 
Zitat:

Und wenn ich die Eigenschaften ListField und KeyField vertausche, werden alle Namen der Kunden angezeigt, ich kann aber nicht auswählen..
Was steht unter DataSource?

marabu 6. Jun 2006 07:28

Re: LookupComboBox mit Bedingung
 
Sorry, hatte KeyField und ListField vertauscht.

Die Vorgehensweise ist auf die Standard BDE Query (RequestLive = True) bezogen. Bei ZEOS musst du vielleicht noch ein paar Klimmzüge machen. Ich kann dir leider gerade nichts dazu sagen, da ZEOS auf dieser Maschine hier nicht installiert ist.

marabu

mkinzler 6. Jun 2006 07:52

Re: LookupComboBox mit Bedingung
 
Wenn du die Daten der Rechnungen an nicht benötigst kannst du auch Folgendes versuchen:
SQL-Code:
SELECT distinct kundendaten.KundenNummer,kundendaten.KundenName FROM kundendaten, rechnungen WHERE kundendaten.kundennummer = rechnungen.kundennummer;
oder

SQL-Code:
SELECT kundendaten.KundenNummer, kundendaten.KundenName FROM kundendaten where exists (select kundennummer from rechnungen where KundenNummer = kundendaten.KundenNummer);

davar 6. Jun 2006 12:12

Re: LookupComboBox mit Bedingung
 
Zitat:

Zitat von mkinzler
SQL-Code:
SELECT distinct kundendaten.KundenNummer,kundendaten.KundenName FROM kundendaten, rechnungen WHERE kundendaten.kundennummer = rechnungen.kundennummer;

Das ist es gewesen. Dankeschön.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 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