AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Hilfe bei N:M Beziehung
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei N:M Beziehung

Offene Frage von "Cosamia"
Ein Thema von Cosamia · begonnen am 9. Jul 2008 · letzter Beitrag vom 10. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Cosamia
Cosamia

Registriert seit: 27. Feb 2007
Ort: Emmendingen
221 Beiträge
 
Delphi 2007 Professional
 
#1

Hilfe bei N:M Beziehung

  Alt 9. Jul 2008, 14:01
Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Hilfe bei N:M Beziehung

  Alt 9. Jul 2008, 14:14
Mit Hilfe eines Joins.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Cosamia
Cosamia

Registriert seit: 27. Feb 2007
Ort: Emmendingen
221 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Hilfe bei N:M Beziehung

  Alt 9. Jul 2008, 14:16
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Hilfe bei N:M Beziehung

  Alt 9. Jul 2008, 14:49
Du brauchst eine Sql-Abfrage, die dir die 3 Tabellen zusammenfügt. Per Lookup (Master/Detail) kann man nur 2 Tabellen zusammenfügen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Cosamia
Cosamia

Registriert seit: 27. Feb 2007
Ort: Emmendingen
221 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Hilfe bei N:M Beziehung

  Alt 9. Jul 2008, 14:50
Ok, verstanden.

Ich werde mal versuchen ein INNER JOIN Statement zu basteln.

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von Cosamia
Cosamia

Registriert seit: 27. Feb 2007
Ort: Emmendingen
221 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Hilfe bei N:M Beziehung

  Alt 9. Jul 2008, 16:48
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Hilfe bei N:M Beziehung

  Alt 9. Jul 2008, 17:51
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;
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Hilfe bei N:M Beziehung

  Alt 9. Jul 2008, 18:14
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
  Mit Zitat antworten Zitat
Benutzerbild von Cosamia
Cosamia

Registriert seit: 27. Feb 2007
Ort: Emmendingen
221 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Hilfe bei N:M Beziehung

  Alt 10. Jul 2008, 06:49
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Hilfe bei N:M Beziehung

  Alt 10. Jul 2008, 06:54
Wenn die n:m Beziehung notwendig ist ja. Aber kann eine Teilaufgabe wirklich Teil mehrerer Anforderungen sein?
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 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