Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Verständnisfrage zu Datenbankbeziehungen dynamisch erstellen

Begonnen von Bohnsopp, Oktober 31, 2016, 10:45:01

⏪ vorheriges - nächstes ⏩

Bohnsopp

Hallo,
ich habe ein Verständnisproblem.
In meiner Datenbank möchte ich mehrere Tabellen dynamisch in VBA erstellen und miteinander verknüpfen. Dies funktioniert auch generell  über ein ALTER TABLE.... ADD FOREIGN KEY.... REFERENCES...  und Access zeigt mir diese Beziehung dann auch unter Entwurf - > Beziehungen als Beziehung mit referentieller Integrität an.
In der Realität sehe ich jedoch keine Beziehung, d.h. in der verknüpften Tabelle wird mir keine Zuordnung zu meiner dynamisch erzeugten Tabelle angezeigt.

Wenn ich die Beziehung nicht in VBA erstelle, sondern unter Access mit Entwurf -> Beziehung
erstelle (oder die oben genannte Beziehung dort modifiziere) sehe ich die Verknüpfung auch in meinen Tabellen.

Was macht Access bei der grafischen Bearbeitung anders verglichen mit meiner ALTER TABLE über  DoCmd.RunSQL.... ?

Danke

MaggieMay

Hallo,

wenn du die Beziehungen im Beziehungsfenster siehst, ist doch alles in Ordnung.
Was genau ist denn dann bei dir die "Realität"?
Freundliche Grüße
MaggieMay

MzKlMu

Hallo,
in der reinen Tabelle kann man auch keine Beziehung sehen.
Gruß Klaus

Bohnsopp

So um das Problem nochmal zu skizzieren, hier 4 Anhänge.

tblWettfahrt4 und tblWettfahrt5 wurden dynamisch erstellt und die Beziehung zur tblStammdaten erzeugt.
Bei tblWettfahrt4 wurden die Beziehungseigenschaften in Access grafisch geöffnet und - ohne sichtbare Änderung - geschlossen und die Beziehungen dann gespeichert. Keine Ahnung was Access dann ändert, aber wie man in der Tabellenansicht dann erkennt sind dort Werte aus der anderen Tabelle verknüpft.

Gruß,
Sascha

DF6GL

Hallo,

Zitat
Was macht Access bei der grafischen Bearbeitung anders verglichen mit meiner ALTER TABLE über  DoCmd.RunSQL....

Beim Ersten benutzt Du Access(-GUI) , um der Jet-Engine die Beziehungen beizubringen, wobei dann Access die Beziehungen eben "kennt".
Beim Zweiten übergehst Du Access und stellt an der Jet-Engine die Beziehungen direkt ein.  Davon weiß Access nun nichts..
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Bohnsopp

ok das klingt einleuchtend.
Kann ich denn Access dazu bringen diese Information aus der Datenbank auszulesen?

DF6GL

Hallo,


wenn Du dies meinst:

Zitatin der verknüpften Tabelle wird mir keine Zuordnung zu meiner dynamisch erzeugten Tabelle angezeigt.

die Tabelle hat die Eigenschaften "Unterdatenblattname","Verknüpfen von" und "Verknüpfen nach", die entspr. eingestellt werden können.


Die Frage besteht allerdings (noch), wozu Du das Ganze  so machst und brauchst.....

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

Hallo,
ich halte das ganze Vorhaben für mehr als fragwürdig. Wieso gibt es mehrere gleiche Tabellen für die Wettfahrten ? Gibt es auch Tabellen für Wettfahrt 1-3 ?
Wieso sind das 1:1 Beziehungen, kann ein Schiff nur eine Wettfahrt machen ?
Die Wettfahrten gehören alle in eine Tabelle mit einem Feld für die Nummer der Wettfahrt und einem Feld als Fremdschlüssel zu den Stammdaten, aber als dann als 1:n Beziehungen.

Und dann noch die grundsätzliche Frage, wieso müssen Tabellen per VBA erstellt werden ?
Wenn man das in einer DB für erforderlich hält, hat man die DB falsch aufgebaut.
Neue Daten in einer DB sollten niemals eine Änderung der Struktur erforderlich machen.
Gruß Klaus

Bohnsopp

#8
Hallo,
ich nehme die Anmerkung keine Ändererungen in der DB-Struktur dynamisch zu erstellen mal auf.
Grundsätzlich halte ich diese Vorgehensweise für sinnvoll, sehe aber für meinen Fall noch kein Konzept wie ich dieses hinbekomme.
In meiner Anwendung kann es zu 1-xx Wettfahrten (in der Regel bis zu 10) kommen. Jede Wettfahrt besteht aus mehreren Daten wie u.A. Startzeit, Zielzeit, Rennstatus (aufgegeben, disqualifiziert, etc.), Yardstick (Berechnungswert), Bemerkung, etc. (siehe Anhang). Alle diese Punkte sind bei jeder Wettfahrt und pro Boot unterschiedlich.
Natürlich könnte ich per Default für X- Wettfahrten Tabellen erstellen. Aber was ist wenn der User dann doch X+1 Wettfahrten braucht?

Um alle Wettfahrten innerhalb einer Tabelle zu berücksichtigen fehlt mir momentan noch die Erfahrung bei der DB-Auslegung.
Habt Ihr hier eine Anregung/Stichpunkt für mich? Ggf. erledigt Google dann den Rest.

Gruß,
Sascha

MzKlMu

#9
Hallo,
das Konzept ist in der Form falsch.
Ich mache Dir mal einen Vorschlag. Aber erst mal folgende Frage:
Welche Felder für eine Wettfahrt sind nicht vom Boot abhängig und welche Felder sind vom Bott abhängig.
Gibt es Felder die eindeutig der Wettfahrt zugeordnet werden können ?
Z.B. Das Feld txtZiel ist doch für alle Boote gleich, oder nicht ?

PS:
Die Präfixe vor den Feldnamen (txt, dat, int usw.) sind so überflüssig wie ein Kropf und mehr hinderlich als diese nutzen. Dass die Startzeit ein Datum ist, weißt Du auch ohne das dat.
Gruß Klaus

Bohnsopp

#10
Danke für den Vorschlag.
Habe mir nochmal die Tabelle angesehen.

folgende Felder sind je Boot und Wettfahrt individuell:
datZielzeit
idRennstatus
txtBemerkung
txtBemerkung2
txtZiel (kann zukünftig entfallen, momentan nur als Ersatzfeld und wird nicht genutzt)

folgende Felder sind über alle Wettfahrten konstant, aber je Boot individuell. Eigentlich stehen diese Infos auch schon an anderer Stelle in der Tabelle "tblGruppe". Könnte man also eigentlich auch weglassen. War im Entwurf damals einfacher so eine Gruppenauswertung zu erstellen ohne komlizierte Beziehungen zu berücksichtigen.
idGruppe

folgendes Feld ist für jedes Boot individuell. Der Grundwert steht in den Stammdaten und wird mit einem Wettfahrtsfaktor (individuell pro Wettfahrt, aber für alle Boote gleich) berechnet:
intYardstick

folgendes Feld hängt an idGruppe + feste Konstanten für die Wettfahrt (z.B. Start1: 14:00, Start 2: 15:00, Gruppe 1,2,3: Start 1, Gruppe 4,5: Start 2):
datStartzeit

Nach der Wettfahrt wird berechnet (ist im dem Screenshot ungünstig, da hier beides immer gleich. Aber Punkte können ggf. durch Disqualifizierung oder anderes Punktesystem anders sein):
intPunkte
idPlatzierung.

Wenn alle Wettfahrten zusammengezählt und die Gesamtplatzierungen berechnet werden ist "intPunkte" das Maß der Dinge.

Gruß,
Sascha

MzKlMu

Hallo,
zwei Zitate von Dir die sich mMn widersprechen:
Zitatfolgende Felder sind je Boot und Wettfahrt individuell:
Zitatfolgende Felder sind über alle Wettfahrten konstant, aber je Boot individuell.
Bitte besser erklären.

Zeige mal ein Bild des Beziehungsfensters auf dem man alle Tabellen mit allen Felder sieht.
Gruß Klaus

Bohnsopp

Zitat von: MzKlMu am November 01, 2016, 12:16:45
Hallo,
zwei Zitate von Dir die sich mMn widersprechen:
Zitatfolgende Felder sind je Boot und Wettfahrt individuell:
Zitatfolgende Felder sind über alle Wettfahrten konstant, aber je Boot individuell.
Bitte besser erklären.

Zeige mal ein Bild des Beziehungsfensters auf dem man alle Tabellen mit allen Felder sieht.

ich habe Dir mal eine Persönliche Nachricht geschickt, da ich mir momentan nicht sicher bin wie weit diese Diskussion noch für die breite Masse interessant ist.

Gruß,
Sascha

Bohnsopp

Hi,
ich habe die DB mal zum besseren Verständniss anonymisiert unter
http://cloud.wattensegler.eu/index.php/s/qzWdrBcIu5uJh9F
zum Download im MDB Format abgespeichert.

Sascha

MzKlMu

#14
Hallo,
das Beispiel beantwortet nicht meine Fragen bzw. die Ungereimtheiten.
Siehe mein Beitrag #12.

Und noch folgende Frage: Kann eine Wettfahrt mehrere Gruppen haben, oder betrifft eine Wettfahrt immer nur eine Gruppe?

Und überhaupt, sind die Gruppen nicht die Bootstypen und damit eine Eigenschaft der Boote und nicht der Wettfahrten ?

Nur mal zum Nachdenken:
Wenn Du in der Tabelle mit den Wettfahrten ein Feld für eine Wettfahrtnummer einbaust kannst Du auf immer und ewig beliebig viele Wettfahrten erfassen ohne jemals weitere Tabelle anlegen zu müssen oder Tabellen zu ändern.
Und kannst trotzdem nach jeder Wettfahrt differenzieren.
Gruß Klaus