Hallo allerseits,
zuerst: Ich kenne mich kaum noch mit Access aus! Daher möchte ich mir wieder einige grundlegende Dinge aneignen.
Ich hatte mal eine uralte Version im Informatikunterricht an der Schule und das wars.
Kurze Info:
Ich besitze Access 2013 und habe eine Datenbank "Filme" mit 2 Tabellen erstellt: "Geschaut" und "ZuSchauen".
Beide Tabellen haben die gleichen Felder, unter anderem "Gesehen" (Ja/Nein). Schlüssel ist jeweils "Name".
Nun möchte ich, dass alle Filme in "ZuSchauen" mit "Gesehen"=Ja in "Geschaut" verschoben werden und aus "ZuSchauen" gelöscht werden.
Das habe ich in 2 Abfragen aufgeteilt, wobei das Löschen funktioniert, jedoch kommt beim Verschieben der Fehler, dass die Datensätze wegen Schlüsselverletzungen nicht angefügt werden können.
Wäre es außerdem möglich, dass nach jeder Änderung eines Datensatzes "automatisch" geprüft wird?
Sitze hier seit 3 Stunden und komme einfach nicht mehr voran :(
Ich hoffe ihr könnt mir trotz meines fehlenden Wissens helfen!
MfG
ga_der_erste
Hi,
viel einfacher wird es, wenn Du EINE Tabelle verwendest mit den Feldern: FilmName und z.B. Aktion.
Im Formular hast Du dann das Feld FilmName und ein Optionsfeld mit mit den Optionen "Zuschauen" und "Geschaut". Damit ersparst Du Dir jegliche Verschieberei / Löscherei. Dann brauchst Du nur einen Klick in das jeweilige Optionsfeld zu machen.
Per Abfrage kannst Du in "Zuschauen" und "Geschaut" unterscheiden {wobei gespeichert werden dann Zahlen und nicht die Begriffe "Zuschauen" und "Geschaut"}.
Nebenbei:
- Schlüsselfelder mit Text-Namen sind unüblich: Schlüssel werden über Zahlen-Felder gebildet.
- Die Bezeichnung "Name" ist suboptimal, weil "Name" ein reservierter Begriff ist. Deshalb besser z.B: "FilmName".
Harald
Vielen Dank für die schnelle Antwort!
Ich weiß dass es mit einer Tabelle einfacher ginge, aber ich möchte mich, wie gesagt, (für zukünftige Datenbanken) etwas mehr mit Access außeinandersetzen und verschiedene Lösungswege kennen lernen.
Deshalb bleibe ich mal vorerst bei den 2 Tabellen.
Außerdem möchte ich in der Tabelle "ZuSchauen" noch das Feld "Rang" hinzufügen, in welchem festgelegt wird, in welcher Reihenfolge ich die Filme sehen werde / wie interessant diese erscheinen. Dieses Feld soll jedoch in "Geschaut" nicht vorhanden sein.
Jeder Film hat jetzt noch eine ID (Autowert okay?) als Schlüssel und "Name" wurde in "FilmName" geändert.
Zitatetwas mehr mit Access außeinandersetzen und verschiedene Lösungswege kennen lernen
Na dann könntest Du eine Anfügeabfrage (zum Kopieren) und eine Löschabfrage auf den Datensatz ausführen, und das im Rahmen einer Transaktion, womit dann die Zusammengehörigkeit beider Schritte fixiert wird.
Hi,
solche "Grundlagen-Forschung" ist z.B. beschrieben auf:
http://www.office-loesung.de/ftopic77699_0_0_asc.php
Nebenbei:
Den Rang sichtbar / unsichtbar zu machen je nach Zuschauen oder nicht, ist im Formular auch mit einer Tabelle machbar. Aber das kommt vielleicht später bei einem anderen Lösungsweg ;D
Harald
Zitat von: ebs17 am März 10, 2014, 22:18:53
Na dann könntest Du eine Anfügeabfrage (zum Kopieren) und eine Löschabfrage auf den Datensatz ausführen, und das im Rahmen einer Transaktion, womit dann die Zusammengehörigkeit beider Schritte fixiert wird.
Wie im ersten Post erwähnt, funktioniert nur leider das Verschieben per Anfügeabfrage nicht...
Zitatsolche "Grundlagen-Forschung" ist z.B. beschrieben auf:
http://www.office-loesung.de/ftopic77699_0_0_asc.php
Nur leider versteh ich dort so ziemlich nix... bin ja noch ziemlicher Anfänger :(
ZitatDen Rang sichtbar / unsichtbar zu machen je nach Zuschauen oder nicht, ist im Formular auch mit einer Tabelle machbar.
Wusste ich gar nicht! Wie würde das denn gehen?
Hallo,
ZitatIch weiß dass es mit einer Tabelle einfacher ginge, aber ich möchte mich, wie gesagt, (für zukünftige Datenbanken)
das würde man in einer korrekt aufgebauten Datenbank immer in einer Tabelle machen. Wie bereits vorgeschlagen.
Daher würde ich mich mit einer solchen Problemstellung erst gar nicht beschäftigen, weil es auch für zukünftige Datenbanken eine Sackgasse wäre und nicht vorkommen sollte.
Gerade als Anfänger solltest Du Dich bemühen, normalisierte Tabellenstrukturen zu erstellen.
Zur Technik:
Zitatjedoch kommt beim Verschieben der Fehler, dass die Datensätze wegen Schlüsselverletzungen nicht angefügt werden können
Verschieben heißt doch nicht vervielfältigen, oder?
Kennst Du die Inhalte Deiner Tabellen?
Hi,
Zitat von: ga_der_erste am März 10, 2014, 22:33:02
Wie würde das denn gehen?
Im Anhang ein Beispiel.
Hat eine Stammdaten-Tabelle mit Rängen und
eine Tabelle mit Filmen
Im Formular gibt es im Kopf eine Auswahlmöglichkeit, die die Daten filtert
Im Detalbereich werden Daten eingetragen.
Das Rang-Feld wird ausgeblendet, wenn "geschaut" wahr ist.
Vielleicht kann das für weitere Versuche dienen.
Harald
Zitatdas würde man in einer korrekt aufgebauten Datenbank immer in einer Tabelle machen.
Vielleicht wäre sie "korrekt", aber anschaulich/benutzerfreundlich noch lange nicht! Es ist einfach schöner 2 separate Tabellen zu haben, damit geschaute und zukünftige Filme ordentlich von einander getrennt und besser vergleichbar sind, auch trotz der Möglichkeit zu filtern.
Außerdem ist es doch unnötig in "Geschaut" Felder zu haben, die nur in "ZuSchauen" benötigt werden.
Es wäre vielleicht einfacher, aber ich mach mir lieber ein mal mehr Mühe und hab dann was gescheites, anstatt dass ich immer nur halb zufreiden bin.
ZitatVerschieben heißt doch nicht vervielfältigen, oder?
Kennst Du die Inhalte Deiner Tabellen?
In beiden Tabellen sind bisher nur jeweils 5 "Testfilme". Kein Film kommt in beiden Tabellen vor.
Verschieben heißt, dass der Eintrag zu "Geschaut" kopiert wird und anschließend wird der alte Eintrag in "ZuSchauen", durch eine andere Abfrage, (erfolgreich) entfernt.
ZitatIm Anhang ein Beispiel.
Danke für die Mühe, Harald!
Ich wusste gar nicht, dass es Formulare überhaupt gibt bzw. was das ist... sowas lernt man nicht in der Schule ???
Ich werde mal etwas damit herumprobieren, nochmals danke :D
Hallo,
ZitatEs wäre vielleicht einfacher, aber ich mach mir lieber ein mal mehr Mühe und hab dann was gescheites,
das ist aber nichts gescheites. Access erwartet für alle Auswertungen und Darstellungen erst mal ein normalisiertes Datenmodell.
Das ist erst mal Grundvoraussetzung. Wie Du das dann später in Formularen darstellst ist erst mal zweitrangig. Da finden sich immer anschauliche und benutzerfreundliche Lösungen.
ZitatEs ist einfach schöner 2 separate Tabellen zu haben, damit geschaute und zukünftige Filme ordentlich von einander getrennt und besser vergleichbar sind, auch trotz der Möglichkeit zu filtern.
das macht man über 2 Abfragen. Das macht keinen Unterschied gegenüber 2 Tabellen.
Ein normalisiertes Datenmodell ist immer vorzuziehen.
Und wenn man es ganz genau nimmt, so ist das ganz anders aufzubauen.
- Tabelle für
alle Filme
- Tabelle für die geschauten Filme
In letzterer Tabelle wird nur das Schlüsselfeld des Films gespeichert. In diese Tabelle kommt dann auch ein Datum, wann gesehen z.B. Den Film der geschaut wurde wählt man dann per Kombi aus.
Das Hin und Her Kopieren entfällt ersatzlos.
Du kannst dann über Abfragen problemlos jede mögliche Auswertung machen:
- welche Filme gibt es
- welchen Film wurde wann geschaut
- wie oft wurde ein Film geschaut.
- welche Filme wurden noch nicht geschaut
Deinen jetzigen Aufbau halte ich für völlig falsch. Gerade im Hinblick auf Deine Anforderung es richtig und gut machen zu wollen.
Okay, wusste ich auch noch nicht...
Wie kann ich denn eine Tabelle erstellen, in der Filme mit "Geschaut"=Wahr automatisch hinzugefügt werden?
Hallo,
nun, wenn Du das alles (noch) nicht weißt, wie wäre es zunächst mit dem Kennenlernen der Access-und DB-Grundlagen, z. B. mittels eines Buches oder einiger Tutorials und Beispiel-Datenbanken, bevor Du fertige (und nicht brauchbare) Lösungen vorschlägst?
Schau mal u.st. Links an, dann findest Du in den ersten sicher ein paar weiterführende Informationen...
Hallo,
ZitatWie kann ich denn eine Tabelle erstellen, in der Filme mit "Geschaut"=Wahr automatisch hinzugefügt werden?
eine solche Tabelle braucht es nicht. Automatisch macht auch keinen Sinn, denn Du musst ja Access sagen welchen Film Du gesehen hast. Und dazu wird der Film (über ein Kombifeld) gewählt und dessen Primärschlüssel in die Tabelle eingefügt. Mehr braucht es nicht.
Auch das Feld "Geschaut"=Wahr ist völlig überflüssig.
Erarbeite Dir die Grundlagen zu Access,, wie von Franz vorgeschlagen.