Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Master-Detail-Verknüpfung (https://www.delphipraxis.net/8382-master-detail-verknuepfung.html)

barnti 3. Sep 2003 13:28


Master-Detail-Verknüpfung
 
Hallo,

ich Versuche eine Master-Detail-Verknüpfung hinzubekommen, habe aber so meine Verständnisprobleme. Dazu folgendes:

2 Tabellen: eine mit Kunden, die andere mit dessen Standorten. Eine 1 zu n Beziehung.

Mein Anliegen ich möchte in einer DBLookupComboBox die Kunden stehen haben. Bei Auswahl eines Kunden dann dessen Standorte in einem DBGrid anzeigen lassen.

Frage: lässt sich das mit Query Komponenten lösen? denn ich möchte nicht immer alle Inhalte verwenden.

Und weiter: wie lässt sich ein Kunde und dessen Standorte beim OnShow-Event voreinstellen?

Ich glaub ich habe eine Blockade!?

Danke für einen Denkanstoß...

Gruß,

Barnti

barnti 3. Sep 2003 14:22

Re: Master-Detail-Verknüpfung
 
Hallo,

Nachtrag:

Die Einstellungen sind bisher:

QueryKunden:
Database: Meine DB
SQL: Select * from Kunden

Query Standorte:
Datenbank: Meine DB
SQL: Select * from Standorte

Das Grid ist über die Datasource mit der QueryStandorte verbunden

Die DBLookUpComboBox über die DatasourceKunden mit der QueryKunden

Noch gibt es aber keine Verbindung zwischen beiden Querys! Wo setze ich diese Eigenschaft? In der Datasource der einen Query?

Please help

Grüße,

Barnti

Generalissimo 3. Sep 2003 14:35

Re: Master-Detail-Verknüpfung
 
Hi,

du brauchst erstmal 2 Query 2 DataSource + die Restelemente für die Verbindung.

1. Query1_getKundenNamen: alle Kunden ermitteln die es gibt
DS1_getKundenNamen: dazugehörige DS

2. DS1_getKundenNamen in DBLookUpComboBox als ListSource definieren
3. ListField bestimmen (das was in Combo angezeigt werden soll)

4. Query2_getStandorte: alle Standorte inkl. der NamenID
(zu welchem Kunden der Standort gehört.

5. Ds_getStandorte (DataSource von Query2) als Datasource der
DBComboBox definieren und Datafield auf die NamenID setzen

6. KeyField des DBCombo auf das Feld setzen das in Datafield angeben ist

ich glaub so müsste es funktionieren. Probiers mal

Leuselator 3. Sep 2003 14:36

Re: Master-Detail-Verknüpfung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Man nehme:

Table: Kunden
Felder: IdKunden,Name

Tabelle: Standorte
Felder: IdStandorte,Ortsname

Tabelle: KundenStandorte
Felder: IdKunden,IdStandorte

Dann Projekt i.A. öffnen
und ein bisser auf die Propertys gucken.

Der Geck ist, das die Query2 als DataSource die DataSource1 hat,
welch an Query1 gebunden ist.
immer, wenn sich nun in Query1 der Datensatzzeiger verändert (durch cklicken auf DbComboBox) wird der Query2 der Parameter IdKunden (erkennbar am Doppelpunkt im SQL-Text) übergeben und die Ergebnismenge der Query2 aktualisiert.

hoffe, es hülft...

Generalissimo 3. Sep 2003 14:37

Re: Master-Detail-Verknüpfung
 
Um deine letzte Frage zu beantworten:
die Verbindung wird über Keyfield=Datafield der
DBLookUpComboBox hergestellt

barnti 3. Sep 2003 15:05

Re: Master-Detail-Verknüpfung
 
hi,

@ Generalissimo:

Das kann nicht funktionieren, da Datasource eine Tabelle beschreibt...

@ Leuselator:

Das klingt doch schon sehr vielversprechend! Ich werde gleich mal basteln.

Bedeutet das, ich muss eine DBComboBox nutzen nicht eine DBLookUp...?

Danke erst mal, ich probier erst mal.

Gruß,

Barnti

Generalissimo 3. Sep 2003 15:15

Re: Master-Detail-Verknüpfung
 
:?: :?: :?:

erläutere mir das mal bitte näher, was du damit meinst

Leuselator 3. Sep 2003 15:24

Re: Master-Detail-Verknüpfung
 
Liste der Anhänge anzeigen (Anzahl: 1)
DbLoockUp benutzt Du in folgender Situation: (Beispiel)

Tabelle1: Kunden
Felder: IdKunden,Name,idKategorie

Tabelle2: Kategorie
Felder: idKategorie,Bezeichnung

Inhalt Tabelle 1:
1,'Meier' ,1
2,'Schulze',2
3,'Müller' ,1
4,'Schmidt',3

Inhalt Tabellle 2:
1,'Toller Kunde'
2,'Ganz toller Kunde'
3,'Unglaublich supertoller Kunde'

(nent man glaube ich Master-Detail-Verknüpfung)
dann würdest Du eine TQuery mit anhängiger TDatasource auf Tabelle 1 setzen:
SQL-Code:
select * from Kunden
und ebenso eine TQuery mit angehangener TDataSource uf Tabelle 2:
SQL-Code:
select * from Kategorie
auf deinem TForm platzierst Du nun DbEdits, die auf TDataSource1 gelinkt sind und eine DbLookUpComboBox, die auf DataSource1 gelinkt ist. Als DataField gibst Du dort idKategorie an, als ListSource die DataSource2, als KeyField das Feld IdKategorie und als ListField das Feld Bezeichnung - fertig

barnti 3. Sep 2003 15:26

Re: Master-Detail-Verknüpfung
 
Hallo nochmal,
ich habe jetzt mal die Einstellungen wie im Beispiel übernommen. Dazu folgendes:

QueryKunde: Select * from Kunde

QueryStandort: SELECT DISTINCT Standort.*, Kunde.*
FROM Standort Standort, Kunde Kunde
where Standort.Kunde_ID= :Kunde_ID

Bei den Parametern der QueryStandort habe ich einen Parameter Kunde_ID angelegt.

Jetzt erscheint beim Start immer die Fehlermeldung:

QueryKunde: Field Kunde_ID not found

Was kann ich tun (außer, dass ich mal ne Pause machen sollte)?

Barnti

Generalissimo 3. Sep 2003 15:31

Re: Master-Detail-Verknüpfung
 
genau wie Leuselator es erklärt hat meinte ich es auch

@barnti: schau mal nach ob der ":" wirklich davor ist


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.
Seite 1 von 2  1 2      

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