![]() |
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. |
Re: Hilfe bei N:M Beziehung
Mit Hilfe eines Joins.
|
Re: Hilfe bei N:M Beziehung
Zitat:
Bitte entschuldige meine "ahnungslose" Frage. |
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.
|
Re: Hilfe bei N:M Beziehung
Ok, verstanden.
Ich werde mal versuchen ein INNER JOIN Statement zu basteln. Danke. |
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; |
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; |
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 |
Re: Hilfe bei N:M Beziehung
Zitat:
|
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. |
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