AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [Access] Tabelle hat Beziehung mit sich selbst
Thema durchsuchen
Ansicht
Themen-Optionen

[Access] Tabelle hat Beziehung mit sich selbst

Ein Thema von hans ditter · begonnen am 28. Nov 2011 · letzter Beitrag vom 5. Dez 2011
Antwort Antwort
Seite 1 von 2  1 2      
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#1

[Access] Tabelle hat Beziehung mit sich selbst

  Alt 28. Nov 2011, 15:20
Datenbank: Access • Version: 2003 • Zugriff über: hauseigene Mittel
Hallo an alle!

Ich hoffe es haben ein paar Ahnung von Access (auch wenn's verhasst ist... ).

Wir müssen für die Schule ein Datenbankprojekt entwerfen zu einem Thema, dass wir selbst wählen. Die Erstellung, Verwaltung und Bearbeitung erfolgt mit den Accesseigenen Mitteln!

wir haben uns nun ausgesucht ein Turnierplansystem zu erstellen. Dabei soll es so sein, dass es eine Mannschaft, ein Schiedsrichter, ein Spielfeld und die Begegnung als Tabellen gibt. Die Begegnung stellt die Beziehung der anderen Tabellen dar.
Nun wollten wir die Beziehung zwischen Mannschaft und Begegnung setzten, hatten allerdings folgendes Problem: im Beziehungsfenster kann ein Primärschlüssel nicht zweimal auf dieselbe Tabelle gezogen werden, auch wenn andere Felder angesteuert werden sollen.

Konkret ist das so:
Wir haben tbl_Mannschaft und tbl_Begegnung. tbl_Begegnung hat nun die Felder BMan1 und BMan2 in denen die Kontrahenten geschrieben werden sollen. Möchte man nun im Beziehungsfenster den Primärschlüssel von tbl_Mannschaft sowohl auf BMan1, als auch auf BMan2 ziehen, so sagt Access das ginge nicht.

Diese Beziehung ist ja aber nunmal essentielle für diese Datenbank. Helft uns bitte!
Wie können wir die Beziehung mit sich selbst in Access umsetzten?

Es kamen schon Anstoßrichtungen, dass man mal auf die Verknüpfung rechts klicken und dann Verknüpfungtyp auswählen soll. Da gibt es drei Möglickeiten, die wir aber alle nicht kennen. Wäre das die richtige Richtung?

LG und vielen Dank; hans ditter
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: [Access] Tabelle hat Beziehung mit sich selbst

  Alt 28. Nov 2011, 15:45
sowas?
Miniaturansicht angehängter Grafiken
ref.png   begeg.png  
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: [Access] Tabelle hat Beziehung mit sich selbst

  Alt 29. Nov 2011, 16:44
Hallo Bummi,

ja, ich schätze schon. Wobei ich feststellen musste, dass nicht das das wirkliche Problem ist, sondern etwas anderes... Trotzdem danke für deine Mühe!

Ich hol dafür nochmal etwas weiter aus. Mannschaften werden mit einem Schlüssel gespeichert, der automatisch weiterzählt.
Wenn ich jetzt eine neue Begegnung per Formular erstellen möchte, dann möchte ich aber nicht den Primärschlüssel eingeben müssen, sondern den Namen der Mannschaft. Ich dachte, dass wäre das Problem mit der Beziehung, aber scheinbar nicht...

Kann mir dazu noch jemand weiterhelfen?

hans ditter
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: [Access] Tabelle hat Beziehung mit sich selbst

  Alt 29. Nov 2011, 16:47
Willst Du den Namen händisch eingeben? Ich würde ja eine ComboBox nehmen, in der die Mannschaften gelistet werden. Die ID der jeweiligen Mannschaft kann man ja unsauber gecastet in den Objects ablegen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: [Access] Tabelle hat Beziehung mit sich selbst

  Alt 29. Nov 2011, 21:54
@DeddyH: deine Antwort klingt unendlich schlau.... aber das sagt mir grade leider gar nichts.

Würdest du dich da bitte nochmal ein wenig erklären? Ich bin noch mitgekommen, dass man eine Combobox nehmen sollte, in der die Namen aller Mannschaften stehen. Aber das mit "ID in Object casten" hab ich dann nicht mehr gerafft.

hans ditter
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: [Access] Tabelle hat Beziehung mit sich selbst

  Alt 29. Nov 2011, 22:12
Mir ist noch nicht ganz klar wie Du das aufziehen willst.
Wenn man es von der Tabellenkomponentenseite angehen kann könntest Du das Dataset mit den Begegnungen um zwei Lookupfelder erweitern die in der Mannschaftstabelle nachschlagen.
Also neues Feld, Feldtyp nachschlagen,Schlüsselfelder BMan1,Datenmenge DatasetManschaft,Schlüssel IDMannschaft, Ergebnisfeld Bezeichnung Mannschaft, das ganze für 2 Felder.
Die Felder kannst Du aus dem Feldeditor auf die Oberfläche ziehen, das werden dann DBLookupcomboboxen, oder direkt in einem DBGrid verwenden (werden dort auch als Comboboxen angezeigt).

Wenn Du datengebunden ohne Lookupfelder arbeiten möchtest kannst Du auch eine DBLookupcombobox verwenden, Datafield und Datasource leer lassen und nur ListSource,ListField und Keyfield versorgen (aus dem Manschftendataset) Keyvalue kannst Du verwenden um die ID für die angezeigte Mannschaft zu bekommen.

Wenn Dir das alles nicht taugt wirst Du vorzugsweise Objekte basteln und um die Ecke in die Datenbank fassen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: [Access] Tabelle hat Beziehung mit sich selbst

  Alt 30. Nov 2011, 07:15
Man könnte eine Routine schreiben, die die Mannschaften ermittelt und in einem TStrings-Objekt ablegt:
Delphi-Quellcode:
procedure TDeinForm.ListTeams(OutList: TStrings; ExcludeID: integer = 0);
begin
  Assert(Assigned(OutList));
  OutList.BeginUpdate;
  try
    OutList.Clear;
    Query.SQL.Text := 'SELECT ID, Name FROM Mannschaften WHERE ID <> :id ORDER BY Name';
    Query.ParamByName('ID').Value := ExcludeID;
    Query.Open;
    while not Query.EOF do
      begin
        OutList.AddObject(Query.FieldByName('Name').AsString,
          TObject(Query.FieldByName('ID').AsInteger));
        Query.Next;
      end;
    Query.Close;
  finally
    OutList.EndUpdate;
  end;
end;
Damit könnte man dann 2 Standard-ComboBoxen befüllen:
Delphi-Quellcode:
ListTeams(cbbHeim.Items);
ListTeams(cbbGast.Items);
Um zu vermeiden, dass dieselbe Mannschaft als Heim- und Gastmannschaft zugewiesen werden kann, filtert man diese heraus, sobald eine Heimmannschaft ausgewählt wurde:
ListTeams(cbbGast.Items, integer(cbbHeim.Items.Objects[cbbHeim.ItemIndex])); Alles getippt und nicht getestet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: [Access] Tabelle hat Beziehung mit sich selbst

  Alt 30. Nov 2011, 14:18
oh Mist!!!! ich glaube da wurde ich gerade mal gigantisch missverstanden!

Wir müssen den Dateizugriff etc. pp. (also auch "Formulare", Abfragen etc) mit den Accesseigenen Mitteln machen! Wäre das mit Delphi, wüsste ich vermutlich sogar, wie ich's machen soll. Nur mit Access ist das immer alles so umständlich... ich hab da keinen Durchblick!

Ich hoffe ihr könnt mir dabei trotzdem helfen...

hans ditter
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: [Access] Tabelle hat Beziehung mit sich selbst

  Alt 30. Nov 2011, 15:03
Hilft dieser Thread?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#10

AW: [Access] Tabelle hat Beziehung mit sich selbst

  Alt 30. Nov 2011, 20:08
Hallo Hans,

bei Access ist das doch eigentlich alles recht einfach, da aus einem Guß, sprich auch seine GUI klickt man sich in der Regel in Access selber zusammen. Was deine Tabellen angeht.

In der Tabelle Begegnungen. Feld Mannschaft_1. Dieses muss Zahl-Long oder so sein, damit es mit den Autowert-Indizes der Mannschaften Tabelle kompatiebel ist. Das wird alles schon bei der Tabellendefinition festgelegt. Da kann man dann auch den Typ des Anzeigefeldes festlegen, also z.B. Nachschlagefeld (=Combobox). Da dann die Datenquelle auswählen. Da kann man als Datentyp eine andere Tabelle oder Abfrage (=Views in anderen DBs) nehmen. Z.B. die sinngemäß Abfrage "Select Man_ID, Man_Name From Mannschaft". Da festlegen, das über das erste Feld verknüpft wird (die ID), aber festlegen, das zwei Felder angezeigt werden sollen in der Combobox (ID und Name der Mannachaft). Dann kann man noch die Anzeigenbreite angeben. Da z.B. "0cm,5cm" eingeben (ohne die "") so wird die ID 0cm breit, sprich gar nicht, und der Name 5 cm breit angezeigt.
Du hast also dein Ergebnis: Obwohl du die Mannschaft per Name auswählst, wird die ID gespeichert.

hth Jumpy
Ralph
  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 04:36 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