Neuigkeiten:

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

Mobiles Hauptmenü

Doppelte Datensätze in Eingabeformular mit vorgebenen Auswahlmöglichkeiten

Begonnen von maxibahx, Dezember 10, 2016, 00:26:42

⏪ vorheriges - nächstes ⏩

maxibahx

Hallo zusammen,

ich bin sowohl Foren- als auch Access-Neuling. Beim Durchstöbern des Forums bin ich zwar auf Probleme mit Duplikaten gestoßen, die Lösungsvorschläge konnten mir aber leider nicht weiterhelfen.

Mein Problem lautet wie folgt: (s. auch Beispiel Datenbank im Anhang)

Ich möchte eine Datenbank im Kontext der Energiewirtschaft erstellen mit vielen Dimensionen, die in n:m Beziehungen zueinander stehen.
Es existieren mehrere Kategorien (Photovoltaik, Wind, Speicher, ...) und zu jeder dieser Kategorien existieren wiederum Ausprägungen (Leistung, Erzeugung, Kosten etc.). Manche Ausprägungen wie z.B. die Angabe der Leistung taucht in mehreren Kategorien auf, deshalb macht für mich eine m:n Beziehung zwischen der "tblKategorie" und "tblAusprägung" Sinn.
Das ganze kann natürlich auch für verschiedene Regionen betrachtet werden. D.h. die Angabe der Leistung aus Photovoltaik (in GigaWatt) sollte für Deutschland einzutragen sein, ebenso für Frankreich... Jedes Land hat wiederum mehrere Kategorien und Ausprägungen (-> n:m Beziehung).

Der wichtige Punkt ist, dass ich die vorhandenen Kategorien und Ausprägungen vorgebe, ich entscheide also schon während der Erstellung der Datenbank welche Werte später eingetragen werden können und welche nicht (PV und eine Kapazitätsangabe hätte keinen Sinn, deshalb ist eine Vorgabe sinnvoll).

In Zukunft sollen für sehr viele Regionen die Werte eingetragen werden, sodass ich mir eine schöne Eingabemaske in Formularform (s. "Formular Werte) vorstelle. Dabei können die vorgebenen Kategorien und Ausprägungen über 2 abhängige Kombifelder ausgewählt werden.

Beim Eintragen eines neuen Wertes (z.B. Frankreich, PV, Leistung: 50 GW) und der Auswahl der Kategorie und Ausprägung erscheint die gewählte Kombination zwischen Kategorie und Ausprägung in der Verknüpfungstabelle "tblKategorie_Ausprägung"  aber in Form eines neuen Datensatzes und es entsteht ein Duplikat (PV, Leistung ist nun doppelt vorhanden). Das ist besonders ärgerlich, da beim Einfügen eines weiteren Wertes nun die Ausprägung "Leistung" zweimal im Drop-Down Menü erscheint.

Ich habe es mit Indizes (ohne Duplikate), verknüpften Primärschlüsseln, ändern der Datenherkunft und Steuerelementinhalte des Kombinationsfeldes versucht. Entweder die Eingabe wurde verweigert, da sonst Duplikate entstehen oder das Duplikat entstand weiterhin. Bei Nutzung eines ungebundenen Kombinationsfeldes werden bei bestehenden Datensätzen wiederum die Kategorien und Ausprägungen nicht angezeigt, was ich auch nicht möchte.

Im Anhang ist meine Beispieldatenbank, die meinem Verständnis nach dem Ergebnis am "nähesten"  kommt. Auf diese beziehen sich auch die oben genannten Tabellennamen. In den nächsten Tagen werden noch weitere Dimensionen wie verschiedene Jahre, Studienergebnisse ... hinzukommen, die ich wiederum als n:m Beziehung interpretiere.

Im Endeffekt hab ich keine Ahnung wie man das Problem löst. Es mag auch schon am grundsätzlichen Aufbau der Beziehungen liegen. Ich bin für jede Hilfe offen und dankbar.


MzKlMu

Hallo,
kannst Du die DB mal zu einer MDB konvertieren, ich habe nur Access2003.

Notfalls nur die Tabellen, oder wenigstens ein Bild des Beziehungsfensters. Aber so, dass man alle Tabellen mit allen Feldern sieht.
Gruß Klaus

Lachtaube

Zunächst einmal mein Lob für ein gelungenes Datenmodell. :) Ggf. nimmst Du noch eine Angabe zum Zeitraum für die Werte mit auf, um Änderungen verfolgen zu können. Ebenso könnte man noch die Einheiten in eine eigene Tabelle auslagern.

Eine Formulareingabe über alle Attribute mehrerer Tabellen ist in der Regel innerhalb eines Formulars mit Schwierigkeiten verbunden, wie Du ja selbst schoin festgestellt hast. Die Eingabe der Region stellt kein Problem dar, weil sie über ein Kombifeld ausgewählt werden kann. Anders ist es jedoch mit Kategorie und Ausprägung, die ja keinen direkten Bezug zu den Werten haben, sondern über eine verknüpfte Tabelle zugeordnet wird. Auch hier könnte man ein Kombifeld verwenden und Kategorie nebst Ausprägung (mit verknüpften Texten) unterbringen. Bei größerer Anzahl an Kategorien und Ausprägungen wird das aber sehr schnell unübersichtlich und lang. Deswegen bietet sich eine Vorauswahl (in meinem Beispiel habe ich die Kategorie gewählt - umgekehrt geht es aber genauso) in einem Kombifeld an, die dann das eigentlich verknüpfte Kombifeld aus Werten der Tabelle KategorieAusprägung entsprechend der Kategorie vorfiltert. Zur Ansicht kommen die Werte aus der Tabelle Ausprägung.

Für eine Dateneingabe ist damit bereits alles wunderbar. Beim Blättern in den Datensätzen ergibt sich aber nun das Problem, dass ein Datensatz nicht immer auch die entsprechende KategorieAusprägung wie sein Vorgänger hat, weshalb man im Beim Anzeigen-Ereignis die Kombifeld-Datensatzherkünfte entsprechend der Daten rückwärts auflöst. Das hört sich komplizierter an, als es ist.

Tritt jetzt der Punkt ein, eine neue Region oder Kategorie nebst Ausprägung haben zu wollen, kann man sich das NotInList-Ereignis eines Kombifelds zunutze machen und nach Nachfrage einen neuen Datensatz mit den eingetippten Daten erstellen. Für die Ausprägung empfieht sich wegen der zwei Felder ein eigenes Formular zu öffnen, sonst müsste man die Eingabe parse, was wiederung wegen Tippfehlern zu ungewollten Resultaten führen kann. Weiterhin kann eine Ausprägung auch nur dann in die KategorieAusprägung-Tabelle eingetragen werdem, wenn auch schon eine Kategorie ausgewählt wurde. Ansonsten kann nur ein Datensatz in Ausprägung erstellt werden, der aber nachträglich bei gleicher Eingabe einer Kategorie zugeordnet werden kann. Sei gewarnt vor dem Tippfehlerteufel.

Persönlich würde ich eher dazu tendieren, ein Haupt/Unterformular-Konstrukt für die Eingabe der Kategorien nebst zuzuweisender Ausprägungen vorzunehmen, zumal die Datenmenge dafür ja endlich zu sein scheint und vermutlich, wenn einmal erfasst, selten oder gar nicht erweitert werden wird. Als Entwickler kann man in so einem Fall die Daten auch gleich in die Tabelle einpflegen.

So, genug der langen Rede - schau mal, ob Du mit dem Beispiel im Upload klar kommst.
Grüße von der (⌒▽⌒)

maxibahx

Guten morgen,

danke für das Lob :D

anbei auch die Datenbank für das 2003er Format.

@Lachtaube: Die Datenbank funktioniert wunderbar, vielen Dank dafür. Jedoch kriege ich es nicht selbst nachgebaut. Es hakt bei mir an den Modulen, die du verwendest. Da steige ich nicht so recht hinter :(

Grundsätzlich benutze ich bisher die allgemeinen Möglichkeiten von Access in der Oberfläche. Und dann den Codegenerator, um z.B. _AfterUpdate() zu nutzen. Das wars dann aber auch schon

Besteht auch mit diesen Mitteln die Möglichkeit die Datenbank funktionsfähig zu machen? Da auf jeden Fall noch die betrachteten Jahre und die Herkunft des Wertes (aus verschiedenen Studien) den aufgespannten Raum erweitern, muss ich das Vorgehen ja reproduzieren können...

Besten Gruß

ebs17

Gibt es einen besonderen Grund, erst Ausprägung und Kategorie zu kombinieren und erst diese Kombination mit der Region zu kombinieren?

Wenn man Ausprägung, Kategorie und Region in einer Verknüpfungstabelle zusammenführt, werden Eingaben sowie auch Auswertungswege vereinfacht und verkürzt.

Die doppelten Datensätze (Titelthema) beherrscht man dann über einen Mehrfelderindex über die drei Fremdschlüssel bzw., wenn man die Angaben zu verschiedenen Zeitpunkten erfasst, über einen Mehrfelderindex, der den Zeitpunkt mit einschließt.
Mit freundlichem Glück Auf!

Eberhard

Lachtaube

@ebs,

für das Zusammenfassen von Kategorie + Auspraegung mag es schon Gründe geben. Die ein oder andere Konstelletion könnte ja durchaus nicht statthaft sein (z. Bsp. Atomenergie in Österreich).

@maxibahx

stelle einfach konkrete Fragen, und die Helfer hier im Forum werden Dir bestimmt dazu konkrete Antworten liefern. Für das ein oder andere Vorgehen gibt es bestimmt auch andere (vielleicht auch bessere) Lösungsansätze.

Vorschlag: zuerst einmal den Tabellenentwurf aufpeppeln. Feldlängen ordentlich einstellen, ggf. Gültigkeitsregeln festlegen, sowie gezielt eindeutige Indizes setzen, um doppelte Eingaben in den Stammdaten zu unterbinden. Pflichtfelder mit Eingabe erforderlich auszeichnen.

PS: Schlüsselfelder (also die, über die eine Beziehung besteht) besitzen bereits einen Index, der allerdings (dummerweise) nicht im Index-Fenster aufgelistet wird. Deshalb wäre nur in der mir bekannten Version in KategorieAusprägung über die beiden Fremdschlüsselfelder ein eindeutiger Index zu legen, der Doppelauszeichnungen verhindert.
Grüße von der (⌒▽⌒)

ebs17

ZitatDie ein oder andere Konstelletion könnte ja durchaus nicht statthaft sein
Das ist schon klar. In einer Verknüpfungstabelle kann man aber bei Anlegen eine Schlüsselkombination nicht verhindern, außer dann rückwirkend über Trigger/DataMacro/VBA oder vorbeugend bei Erfassung über Formular. In welcher Verknüpfungstabelle das dann stattfindet, wäre dann egal.

Man müsste bei Bedarf auszuschließende Kombinationen irgendwo hinterlegen (les- und pflegbar) => Tabelle.
Mit freundlichem Glück Auf!

Eberhard

crystal

Hallo,
Mein Ansatz ist etwas anders (wie üblich).

Ich gehe von einer Tabelle tblRKAE aus, in der mögliche Kombinationen von
R egion
K ategorie
A usprägung
E inheit
enthalten sind (deshalb der Name RKAE).

Basis sind sep. Tabellen für RKAE.

Wenn nun ein Datensatz in meiner tblDaten angelegt wird, selekt man zunächst die Region. Passend wird dann die Rcordsource für das nachfolgende Feld gesetzt (also Kategorie) und man kann nur solche Kats auswählen, die zuvor in der Tabelle tblRKAE definiert wurden.
Entsprechendes gilt dann für Ausprägung und Einheit.

Damit ist es möglich, sich "top-down" durch die Hierachie zu hangeln und sowohl mögliche Kombinationen als später auch Daten zu speichern.

Probleme:
1. Nachträgliche Änderung einer höheren Stufe. Hier müsste man untergeordnete Stufen zuerst löschen.
2. Beim Scrollen durch die DS (Navigations-Buttons) verschwindet der Text in "Einheit". Hat das Feld den Fokus, klappt es.

Idee:
Hierarchische Erfassung von Definitionen und/oder Daten mit verschachtelten Unterformularen zur besseren Übersicht, z.B.
Deutschland
- PV
- - Leistung
- - - GWh
- - Kosten
- - - €/kWh
- - Erzeugung
...
Das krieg ich momentan nicht hin, habe zu viel andere Dinge im Kopf...

Meine kleine Lösung kommt ohne besonderen VBA-Code aus, der nicht nachzuvollziehen wäre.

Aber: es sind wohl noch Verbesserungen erforderlich.

lg
crystal

Im Anhang DB als accdb und als mdb

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

crystal

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

maxibahx

Schönen guten Abend,

mit eurer Hilfe habe ich meine bestehende DB nach meinen Kenntnissen so umgebaut, dass es klappt   :D :D

Das war schon mal richtig cool, besten Dank an alle.

@crystal: Dein Vorgehen funktioniert ebenfalls super, aber man müsste ja bei neuen Regionen immer wieder jede einzelne Kombination manuell eintragen. Das ist mir dann doch zu viel Arbeit!

Falls jemand an der Lösung interessiert ist, ist sie hiermit hochgeladen.

maxibahx

Nun leider leider wie angesprochen, habe ich das ganze aber noch stark erweitert.

Und wie es sein musste, enstanden auch wieder neue Probleme...

Aus diesem Grund meine Bitte, ob Ihr mir erneut aus der Patsche helfen könntet?

Die bestehenden Kategorien, Ausprägungen und Regionen sind um "Prognosejahre, Studien und Szenarien" erweitert.

Als Beispiel:
Die Studie mit Studientitel "Titel A" prognostiziert in ihrem "Szenario 1" für "Deutschland" im Prognosejahr "2035" die "Leistung" von "PV" auf "60 GW".
Eine andere Studie "Titel B" aber eher auf "40 GW" für sonst gleiche Rahmenbedingungen.

Was soll in der DB passieren? Lediglich in der Tabelle "KategorieAusprägungRegionPrognosejahr_StudieSzenario" soll ein weiterer Datensatz hinzukommen.
In meiner derzeitigen Datenbank-Version wird aber nun für die Region (in Tabelle "KategorieAusprägung_Region") und für das Prognosejahr (in Tabelle "KategorieAusprägungRegion_Prognosejahr") ein neuer Datensatz angelegt, der aber im Grunde schon wieder doppelt ist, weil es sich ja bis auf die Studie und Szenario um komplett identische Bedingungen handelt.

Das Vorgehen der kleinen Datenbank vom Samstag habe ich versucht auf dieses nun größere Konstrukt zu übertragen, aber letzendlich leider ohne Erfolg.

Die Datenbank ist angefügt. Hat jemand einen Einfall?

Danke für eure Unterstützung !!!

Lachtaube

Den Vorschlag mit der Indexierung hat Dir wohl nicht gefallen. ;D Nun - die Tabelle mit den reinen Jahreszahlen halte ich für Humbug und habe sie deshalb auch aus meinem Beispiel eliminiert.

Wenn Du mehrere Daten zu einer Studie hintereinander eintragen willst, so löscht man natürlich nicht die Auswahl im Kombifeld in Form_Current. Diesen Arbeitsablauf erleichternd wäre dann zusätzlich das Verwenden eines Standardwerts für ID_StudieSzenario (siehe: Standardwert aus vorherigem Datensatz), so dass nur noch Region, Kategorie sowie Ausprägung nebst Werten eingegeben werden müssen.
Grüße von der (⌒▽⌒)

maxibahx

Hi Lachtaube,

unfassbar wie schnell du das wieder hinbekommen hast ;D  Es funktioniert einwandfrei, genauso habe ich es mir vorgestellt. Jetzt muss ich es nur noch nachvollziehen und richtig einbauen :P Super vielen Dank.

Zu der Indexierung: Die ist natürlich bzgl. unbewusster Duplikaterzeugung enorm wichtig. Hatte ich bisher verdrängt, wird aber ebenfalls übernommen.

Insofern nochmals besten Dank !!!

maxibahx

Hi Lachtaube,

komme mal wieder nicht weiter :(

Wenn ich nun in deiner letzten Version zu Speicher und Leistung (als Bsp.) etwas eintragen will, erscheint kein Prognosejahr. Ist auch logisch, weil es eben noch nicht existiert.
Außerdem werde ich auch häufiger ein neues Prognosejahr eingeben wollen (auch mal nicht 2035).

Ich habs über den bekannten NotInList-Befehl versucht, stoße da aber an meine Grenzen.

Weißt du wie man es abändern müsste?

Gruß,
Maxibahx

maxibahx

Ich versuche es mal genau zu erläutern.

Ich wähle die Studie aus und bekomme die dazu gehörigen Szenarien in einem Dropdown Menü.
Entweder ich wähle ein Szenario oder schreibe ein neues rein. Bei letzterem soll dieses Szenario hinzugefügt werden, in Referenz zur Studie.

Dann wähle ich die Kategorie und erhalte die dazu passenden Ausprägungen. Eine der Ausprägungen wird ausgewählt. (Diese beiden Tabellen sind fix und werden nicht mehr erweitert)

Nun sollen alle bisher vorhandenen Regionen verfügbar sein, oder auch eine neue hinzufügbar. Hierbei aber unabhängig, ob zu dieser Region schon die identische Kombi aus Kat. und Auspr. existiert. Es soll einfach die Region ausgewählt werden können. Wenn man sie schon mal irgendwann eingetippt hat, so soll sie auch im Dropdown erscheinen, damit es schneller geht

Danach sollen alle bisher vorhandenen Prognosejahre verfügbar sein, oder auch neues hinzufügbar sein. Unabhängig davon, ob schon die identische Kombi aus Kat. und Auspr. und Region existiert. Einfach das Jahr soll einzutippen sein (oder im Dropdown verfügbar, damit man schneller ist).Wenn man es schon mal eingetippt hat, so soll sie auch im Dropdown erscheinen, damit es schneller geht

Im letzten Schritt wird dan quasi alles zusammengefügt. Wenn nur ein neues Jahr, bei bereits bekannter Region und bereits bekannter Kat. und Auspr. hinzugekommen ist, soll keine neue ID_KategorieAusprägungRegion hinzukommen, sehr wohl aber eine neue ID_KategorieAusprägungRegionJahr (weil ein neues Jahr dabei ist).

Ich hoffe mein Ziel ist verständlich. Eigentlich fühle ich mich schon sehr nah dran, insbesondere durch eure Hilfe, der letzte Kniff fehlt leider.

Nächste Woche müssen mehrere Tausend Werte eingegeben werden. Deshalb sollen Redundanzen vermieden werden, um das ganze schneller zu machen. Wenn man z.B. grad PV, Leistung, Deutschland, 2035 eingetippt hat, soll man nicht alles nochmal neu eintippen, wenn nun PV, Erzeugung, Deutschland, 2025 einzutippen ist (hier soll Deutschland schon im Dropdown erscheinen). Ebenso bei PV, Erzeugung, Deutschland, 2035 als dritten Schritt soll Deutschland im Regions-Dropdown und 2035 im Prognosejahr-Dropdown erscheinen