Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Hilfe bei N:M Beziehung (https://www.delphipraxis.net/116966-hilfe-bei-n-m-beziehung.html)

Cosamia 9. Jul 2008 14:01

Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO

Hilfe bei N:M Beziehung
 
Hallo,

ich habe mal wieder ein neues Projekt, welches mich aber vor bisher nicht gekannt Probleme stellt.
Es handelt sich um eine Art Projektverwaltung in der Anforderungen und Teilaufgaben abgehandelt werden sollen.

Dazu habe ich drei Tabellen angelegt : ANFORDERUNG,TEILAUFGABE und die Hilfstabelle TEMP.

Alle drei haben pro Datensatz eine eindeutige ID. Die Fremschlüssel sind in der TEMP vorhanden.

Angesprochen werden alle drei über eine DATASOURCE mit ADOQUERY.

Für die ersten Versuche habe ich eine DBLookupComboBox benutzt.

Datasource auf QueryTEMP mit Datafield ID (eindeutige ID von ANFORDERUNG).

Listsource auf QueryANFORDERUNG mit Listfield BEZEICHNUNG und Keyfield ID.

Mir fehlt jetzt einfach die Idee wie ich in einem DBGrid alle TEILAUFGABEN zu der in der ComboBox gehörigen ANFORDERUNG anzeigen lassen kann.

In der Datenbank habe ich die nötigen Einträge vorgenommen.

Danke.

mkinzler 9. Jul 2008 14:14

Re: Hilfe bei N:M Beziehung
 
Mit Hilfe eines Joins.

Cosamia 9. Jul 2008 14:16

Re: Hilfe bei N:M Beziehung
 
Zitat:

Zitat von mkinzler
Mit Hilfe eines Joins.

ein Join in einer SQL Abfrage ? Oder lässt sich das auch über die Combobox steuern?

Bitte entschuldige meine "ahnungslose" Frage.

mkinzler 9. Jul 2008 14:49

Re: Hilfe bei N:M Beziehung
 
Du brauchst eine Sql-Abfrage, die dir die 3 Tabellen zusammenfügt. Per Lookup (Master/Detail) kann man nur 2 Tabellen zusammenfügen.

Cosamia 9. Jul 2008 14:50

Re: Hilfe bei N:M Beziehung
 
Ok, verstanden.

Ich werde mal versuchen ein INNER JOIN Statement zu basteln.

Danke.

Cosamia 9. Jul 2008 16:48

Re: Hilfe bei N:M Beziehung
 
Mein Versuch mit einem Join hat bisher nicht zum Erfolg geführt.

Ich habe die ganze Angelegenheit mal wie folgt zusammengeschustert.
Evtl. hat mir ja jemand ein Tip wie man das eleganter machen kann.

Delphi-Quellcode:
 temps := treeview1.Selected.Text;

    {ID vom Datensatz mit der Beszeichnung herausfinden}
    queryanf.SQL.Clear;
    queryanf.SQL.Text := 'select * from ANFORDERUNG where Bezeichnung='''+temps+'''';;
    queryanf.Open;
    id := queryanf.FieldByName('ID').AsString;

    {TAID aus der Referenztabelle rausziehen}
    querytemp.SQL.Clear;
    querytemp.SQL.Text := 'select * from temp ID='''+id+'''';;
    querytemp.Open;

    {Die einzelnen TAID abarbeiten}
    while not querytemp.Eof do begin
    quanta := querytemp.RecordCount;
    tempid := querytemp.FieldByName('taid').AsString;

    tempids := tempids +','+tempid;
    {nächster Datensatz in der Query}
    querytemp.Next;
    end;
    quanta := length(tempids);
    tempids := copy(tempids,2,quanta);
    queryta.SQL.Text := 'select * from TEILAUFGABE where TAID in ('''+tempids+''')';;
    queryta.Open;

mkinzler 9. Jul 2008 17:51

Re: Hilfe bei N:M Beziehung
 
Warum nicht so
SQL-Code:
select
    a.*, t.*
from
    anforderungen a
        join temp tmp on tmp.id = a.id
            join Teilaufgabe t on t.id = tmp.taid
where
    a.Bezeichnung = :bez;

marabu 9. Jul 2008 18:14

Re: Hilfe bei N:M Beziehung
 
Hallo,

kann wirklich eine bestimmte Teilaufgabe mehreren Anforderungen zugeordnet werden? Mit anderen Worten: Liegt wirklich eine M:N Beziehung vor? Wenn ja, dann besteht die Zuordnungstabelle üblicherweise nur aus den beiden Fremdschlüsseln. Wenn nein, dann ist ANFORDERUNGEN_ID Teil von Tabelle Teilaufgaben und statt eines JOIN wird ein simpler Filter benötigt, der durch die Verkettung von Datenquellen (MasterSource) realisiert werden kann.

Freundliche Grüße

Cosamia 10. Jul 2008 06:49

Re: Hilfe bei N:M Beziehung
 
Zitat:

Zitat von marabu
Hallo,

kann wirklich eine bestimmte Teilaufgabe mehreren Anforderungen zugeordnet werden? Mit anderen Worten: Liegt wirklich eine M:N Beziehung vor? Wenn ja, dann besteht die Zuordnungstabelle üblicherweise nur aus den beiden Fremdschlüsseln. Wenn nein, dann ist ANFORDERUNGEN_ID Teil von Tabelle Teilaufgaben und statt eines JOIN wird ein simpler Filter benötigt, der durch die Verkettung von Datenquellen (MasterSource) realisiert werden kann.

Freundliche Grüße

Die Zuordnungstabelle besteht aus den zwei Fremdschlüsseln und einer eigenen ID. Ist das nicht korrekt? :gruebel:

mkinzler 10. Jul 2008 06:54

Re: Hilfe bei N:M Beziehung
 
Wenn die n:m Beziehung notwendig ist ja. Aber kann eine Teilaufgabe wirklich Teil mehrerer Anforderungen sein?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
Seite 1 von 2  1 2      

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