Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Verknüpfung von zwei Formularen / Bedingte Erstellung von neuem Datensatz

Begonnen von micha286, November 09, 2011, 11:31:58

⏪ vorheriges - nächstes ⏩

micha286

Hallo liebe Access-Profis,

nachdem ich mich schon dank vieler Eurer Beiträge mit meinem aktuellen Datenbank-Projekt gut voran gekommen bin, hänge ich gerade an einer für mich nicht ganz einfachen Stelle. Ich hoffe dabei jetzt auf eure Hilfe und würde mich über euer Feedback freuen.

Folgende Problemstellung habe ich vor mir:

Datenbankstruktur:

Tabellen
1. Tabelle mit Kontaktdaten [tbl_Kontakt], Primärschlüssel IDKunde
2. Tabelle mit Testamentsangaben [tbl_T], Primärschlüssel IDTestament

Formulare
1. Formular zur Eingabe der Kontaktdaten [frm_Kontakt]
2. Formular zur Bearbeitung des Testaments [frm_T], Eingabe Kundenname (=> IDKunde), etc.

Nun möchte ich folgendes:

Im frm_Kontakt habe ich einen Button, der beim Klicken folgendes umsetzen soll

1. DoCmd.OpenForm "frm_ATV"
2. Prüfung, ob für frm_Kontakt.IDKunde ein Testament vorliegt
3A. Falls ja, springe zu diesem Datensatz in frm_ATV
3B. Fall nicht, erstelle neuen Datensatz in frm_ATV mit IDKunde aus frm_Kontakt


Meinen bisherigen Recherchen zufolge müsste das übergeben der IDKunde mit "OpenArgs" funktionieren, jedoch weiß ich nicht an welcher Stelle und wie ich die Prüfung implementieren soll (ggf. noch vor Öffnen des frm_ATV ?).

Vielleicht wäre es auch cleverer, das Problem mit einem UFO zu umgehen. Ich finde die von mir angedachte Lösung aber deutlich schöner und auch für den späteren Benutzer einfacher.


Ich würde mich freuen, wenn ihr mir weiterhelfen könntet. Vielen Dank schon jetzt für eure Unterstützung!

Beste Grüße

Jonny

Hallo,
ich halte die Version mit UFO für übersichtlicher (und einfacher zu erstellen).
Vorteil ist doch das sofort sichtbar ist ob ein Testament vorhanden ist oder nicht.
Außerdem sind nicht nur die Testamentsdaten sondern auch die Kontaktdaten zu sehen.

Gruß

Johann

micha286

Hallo Johann,

besten Dank für deine schnelle Antwort. Ich habe mir das mit dem UFO überlegt, ich stoße bei der Umsetzung dann jedoch auf folgende zwei Probleme:

1. Wie kann ich einstellen, dass in dem UFO beim Öffnen über den Button entweder nur den bereits vorhandenen Datensatz anzeigt, oder aber einen neuen anlegt mit IDKunde aus frm_Kontakt? M.E. kann ich die zugehörigen Formular-Eigenschaften ("Anfügen zulassen" und "Daten eingeben") dann weder in den Formular Eigenschaften, noch im Ereignis "Beim Öffnen" fest hinterlegen, da es ja abhängig davon ist, ob bereits ein Datensatz existiert oder nicht. Oder?

2. Ich möchte die Bearbeitung sämtlicher (!) Testamente auch ermöglichen, ohne vorher das Formular frm_Kontakt zu öffnen und den Button zu betätigen. Das kollidiert ggf. mit der Umsetzung zu 1. Oder spricht das eher für ein neues Formular?

Besten Dank nochmal für die Hilfe und beste Grüße!

Jonny

Hallo,
das schöne am UFO ist ja das die Verknüpfung eine über die Eigenschaften Verknüpfen von und Verknüpfen nach (in deinen Fall
IDKunde) gemachte werden. (siehe Eigenschaften vom UFO).
Ist ein Testament vorhanden wird es angezeigt und kann editiert werden.
Ist kein Testament vorhanden können die Daten einfach erfasst werden. Der Fremdkey (IDKunde) wird automatisch
in dein UFO geschrieben.

Gruß
Johann

micha286

Hallo Johann,

stimmt, das hatte ich irgendwie nicht auf dem Schirm. Habe ich jetzt auch erstmal so umgesetzt und funktioniert fast schon komplett so, wie ich es mir vorstelle. Nur soll es für jeden Kunden nur max. 1 Testament geben, und im UFO kann ich ja theoretisch einen neuen Datensatz hinzufügen. Um vielleicht meine Frage noch einmal zu konkretisieren bzw. umzuformulieren:

Kann ich per VBA die Eigenschaften eines Formulars ("Anfügen zulassen" und "Daten eingeben") von einer Bedingung abhängig machen?

Pseudo-mäßig stelle ich mir das dann so vor:

"WENN Testament vorhanden DANN (Bearbeitung Datensatz zulassen) = True, (Neuer Datensatz hinzufügen) = False SONST Neuen Datensatz hinzufügen, (Bearbeitung Datensatz zulassen) = True, (Neuer Datensatz hinzufügen) = False"

Wenn ich die Eigenschaft des Formulars global so definiere, kann ich ja kein neuen Datensatz hinzufügen und somit kein neues Testament anlegen, oder?

Besten Dank nochmal!

Gruß
Micha

MzKlMu

Hallo,
das ist eine 1:1 Beziehung. Daher solltest Du zunächst mal den Fremdschlüssel auch auf Duplikate=Nein einstellen. Damit ist es zunächst mal technisch nicht mehr möglich ein weiteres Testament zu erstellen, das wird von Access verhindert.
Weiterhin kannst Du im Formularereignis "Nach Aktualisierung" die Datensätze mit DCount() in Abhängikeit der KundenID zählen und bei >0 das Formular für weitere Eingaben sperren.

Eine weitere Frage:
Gibt es zu jedem Kunden ein Testament?
Gruß Klaus

DF6GL

Hallo,

was spricht denn dagegen, die Testaments-Felder in die Kontakt-Tabelle mit aufzunehmen?

Das Handling einer 1:1-Beziehung ist m. E in solchen Fällen mit mehr Umstand verbunden als die Akzeptanz von ein paar nicht benutzten Tabellenfeldern.....
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,
Zitatwas spricht denn dagegen, die Testaments-Felder in die Kontakt-Tabelle mit aufzunehmen?
Genau das war der Hintergrund meiner Frage:
ZitatGibt es zu jedem Kunden ein Testament?
Wenn das nämlich zutrifft, wäre es sowieso die bessere Lösung alles in eine Tabelle zu haben.
Gruß Klaus

micha286

Hallo zusammen,

besten Dank für eure Antworten und Tipps . Ich freue mich einerseits, dass ihr mir weiterhelft, bin andererseits auch etwas beruhigt darüber, dass die Lösung nicht unbedingt trivial zu sein scheint.

Um auf eure Frage bzgl. der Testament-Kontakt Zuordnung einzugehen: Jeder Kunde hat letzten Endes ein Testament, das stimmt soweit. Allerdings, und das macht es komplizierter, gibt es mehrere Testamentsentwürfe und das gültige Testament ist dann das jeweils aktuellste. (Genauer gesagt habe ich eine Tabelle, in der zu jedem Testamentsentwurf die Kunden ID und das Datum erfasst wird. Eine Abfrage gibt dann für ein Formular für den Kunden das Testament aus, mit dem dem neusten Datum). Daher kann ich es mE leider nicht mit in die Tabelle zu den Kontaktdaten packen. Ich glaube aber dann auch nicht, dass ich das mit einer 1:1 Beziehung umsetzen kann, oder?

Besten Dank für eure Unterstützung!

Gruß
Micha

MzKlMu

Hallo,
das geht natürlich nicht mit einer 1:1 Beziehung. Deine jetzige Erklärung passt auch nicht zu den früheren Erklärungen:
ZitatNur soll es für jeden Kunden nur max. 1 Testament geben
So wie Du das jetzt hast, ist es doch richtig. Eine 1:n Beziehung von Kunde zu Testament(entwürfen).
Die Anzeige erfolgt in einem Unterformular, das neueste Datum oben (absteigend nach Datum sortiert). Das oberste Testament ist damit das aktuellste.
Da es zu einem Kunden doch mehrere Testamente (mit den Entwürfen) geben kann ist Dein ursprüngliches Vorhaben mit den 2 Tabellen gar nicht möglich.
Du kannst eine etwas andere Lösung andenken. Z. B. beim Anlegen eines neuen Testaments(entwurfs) die Testamentid als Fremdschlüssel in die Kundentabelle eintragen.

Dann kannst Du mit einer Abfrage immer automatisch den Kunden und das gültige Testamant anzeigen.
Ab er an sich, ist das auch überflüssig, über das Datum hast Du jederzeit ein aktuelles Tetament.
Gruß Klaus