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
hans ditter

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

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
 
#2

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.662 Beiträge
 
Delphi 12 Athens
 
#3

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
 
#4

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.662 Beiträge
 
Delphi 12 Athens
 
#5

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.740 Beiträge
 
Delphi 6 Enterprise
 
#6

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
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#7

AW: [Access] Tabelle hat Beziehung mit sich selbst

  Alt 1. Dez 2011, 07:16
Ich würde das ungefähr so aufbauen:
- eine Tabelle "Saison"
- eine Tabelle "Mannschaften"
- eine Tabelle "Begegnungen"

So, die Begegnungen bekommen dann 4 Felder: ID (Autowert), ID_Saison (FK auf Saison), ID_Heim (FK auf Mannschaften), ID_Gast (nochmal FK auf Mannschaften). Über einen Check-Constraint stellt man sicher, dass sich ID_Heim und ID_Gast unterscheiden müssen (eine Mannschaft kann ja nicht gegen sich selbst spielen). Außerdem bekommt die Kombination aus ID_Saison, ID_Heim und ID_Gast einen Unique-Index verpasst, da es je Saison nur ein Hin- und ein Rückspiel gibt. Somit sollte das recht wasserdicht sein. Inwieweit sich das mit Access machen lässt, kann ich allerdings nicht sagen, da ich keins besitze.
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
Antwort Antwort


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 15:36 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