Automat. einfügen von Werten aus anderer Tabelle

Hallo Experten !

Ich bin Access-Neuling, und komme einfach nicht weiter.

Ich habe drei Tabellen. In der ersten habe ich Artikelnummer (Primärschlüssel und Autowert), dann noch Artikelname und Preis.

In der zweiten Tabelle habe ich Bestellnummer(Primärschlüssel und Autowert), und noch weitere Bestellungsdaten.

Wenn jetzt unter einer Bestellnummer mehrere Artikel bestellt werden, so soll das in einer dritten Tabelle gespeichert werden. Sie soll die Bestellnummer, die Artikelnummer, und den Preis dieses Artikels beinhalten. Der Clou (für mich !!) wäre, wenn der Preis automatisch eingetragen wird, sobald die Artikelnummer in der Tabelle steht. Wie bekomme ich das hin ? Muss ich das mit VBA programmieren, oder gibt es eine Funktion in Access, die genau das für mich erledigt ?!?

Vielen Dank schon mal für eure Antworten !!!

Mfg
Maik

hi!

ich versuch’s mal (obwohl ich alles andere als ein access-experte bin):

  1. würde ich das nicht machen, da es sich um eine redundanz handeln würde (wozu brauchst du den preis 2x in der datenbank?)

  2. wie hast du das mit der positionsnummer gelöst? mit einer listbox? falls ja, nimm den preis mit in das select der liste

  3. mit der abfrage
    update bestellung_artikel
    set preis = (select preis from artikel
    where artikel.nummer = bestellung_artikel.artikelnummer)
    where preis is null;

geholfen?

die access und vb-experten werden dir sicher noch einfachere lösungsmöglichkeiten geben …

grüße,
tomh

Hallo Maik!

Du gehst etwas falsch - aber nicht ganz falsch an diese Aufgabe heran!

Du brauchst 3 Tabellen dafür - einverstanden!

Dafür braucht man 3 Primärschlüssel - einverstanden!

Alle 3 Primärschlüssel müssen Auto Wert sein? - nicht einverstanden!!!

Deine Haupttabelle, die Du mit den beiden anderen Tabellen verknüpfst, muß als Primärschlüssel einen Autowert erhalten!

Die anderen beiden Tabellen werden als Zahl | Long Integer formatiert - aber nicht als Auto Wert!

Danach funktionieren die Verknüpfungen richtig.

Das mit dem 2. Preisfeld muß dabei sogar sein. In der dritten Tabelle müssen alle Felder enthalten sein, die auch in der ersten Tabelle enthalten sind - die Verknüpfung muß eine 1:n Beziehung sein. Deshalb darf in dieser 3.ten Tabelle der Primärschlüssel kein Autowert sein!!!

1:n Beziehung = 1 zu viele Beziehung!

Deshalb muß auch in der ersten Tabele der Primärschlüssel ein Autowert sein = 1

In der 3.ten Tabelle darf der Primärschlüssel aber auf keinen Fall ein Autowert sein = 1; wir brauch3n aber eine 1: n Beziehung! Deshalb Tabelle 3 Primärschlüssel Zahl | Long Integer = viele!

Wie Du jetzt das rechnerische Problem löst, kann ich Dir jetzt auf dieSchnelle auch nicht sagen, der Grundaufbau muß aber so aussehen.

Gruß Albert

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hi!

(wir bewegungen uns jetzt in die tiefen der datenmodellierung, unendliche weiten von normalformen und beziehungen erscheinen vor unserem geistigen augen)

Alle 3 Primärschlüssel müssen Auto Wert sein? - nicht
einverstanden!!!

wieso nicht? es reicht vollkommen aus, wenn foreign-keys existieren - ein eindeutiger primärschlüssel bestehend aus einem feld für jede tabelle ist gar nicht mal so schlecht

ARTIKEL
id (autowert)
bezeichnung
preis

BESTELLUNG
id (autowert)
datum
kunde

ARTIKEL_BESTELLUNG
id (autowert)
artikel_id (foreign key auf artikel)
bestellung_id (foreig key auf bestellung)
stueck
preis (redundant, aber ev. gibt’s ja rabatt oder so, wobei es bezüglich der wartung besser wäre, nur eine änderung des artikelpreises hier mitzuführen)

(ist sogar mit access schön grafisch zu bewerkstelligen)

Deine Haupttabelle, die Du mit den beiden anderen Tabellen
verknüpfst, muß als Primärschlüssel einen Autowert erhalten!

es gibt 2 "haupt"tabellen (artikel + bestellung), wobei artikel und bestellung eine n:m-beziehung haben, die über artikel_bestellung zu zwei 1:n-beziehungen gelöst wird

Das mit dem 2. Preisfeld muß dabei sogar sein. In der dritten
Tabelle müssen alle Felder enthalten sein, die auch in der
ersten Tabelle enthalten sind - die Verknüpfung muß eine 1:n
Beziehung sein. Deshalb darf in dieser 3.ten Tabelle der
Primärschlüssel kein Autowert sein!!!

a) das 2. preisfeld muß absolut nicht vorhanden sein: 1) verstoß gegen die 3. normalform 2) reduntantes führen von feldern verursacht einen mörderaufwand, sobald sich ein feld ändert, das dann in den anderen tabellen mitgezogen werden muß
b) 1:n-beziehung ist schon richtig, allerdings existieren 2 dieser beziehungen (artikel 1-n bestellung_artikel und bestellung 1_n bestellung_artikel)

1:n Beziehung = 1 zu viele Beziehung!

eher n:m-beziehung ist eine beziehung zuviel …

Deshalb muß auch in der ersten Tabele der Primärschlüssel ein
Autowert sein = 1

In der 3.ten Tabelle darf der Primärschlüssel aber auf keinen
Fall ein Autowert sein = 1; wir brauch3n aber eine 1: n
Beziehung! Deshalb Tabelle 3 Primärschlüssel Zahl | Long
Integer = viele!

???

grüße,
ein aufgrund der letzten absätze ziemlich verwirrter tomh

Hallo Maik; Hallo unendliche Weiten!

Hier für dich als Neuling ein kleiner Einstiegskurs. Für die unendlichen Weiten eine Wiederholung von Normalfällen!

(Die unendlichen Weiten [des Raumschiffs Entensch…] sind hoffentlich auf Empfang geschaltet.)

1:n-Beziehung

Eine 1:n-Beziehung ist der häufigste Beziehungstyp. In einer 1:n-Beziehung können einem Datensatz in Tabelle A mehrere passende Datensätze in Tabelle B zugeordnet sein, aber einem Datensatz in Tabelle B ist nie mehr als ein Datensatz in Tabelle A zugeordnet.(die beste Art von Beziehungen)

m:n-Beziehung

In einer m:n-Beziehung können jedem Datensatz in Tabelle A mehrere passende Datensätze in Tabelle B zugeordnet sein und umgekehrt. Dies ist nur möglich, indem eine dritte Tabelle definiert wird (die als Verbindungstabelle bezeichnet wird), deren Primärschlüssel aus zwei Feldern besteht, den Fremdschlüsseln aus den Tabellen A und B. Eine m:n-Beziehung besteht eigentlich aus zwei 1:n-Beziehungen mit einer dritten Tabelle. (nicht unbedingt ratsam da eine unnötige Tabelle)

1:1-Beziehung

In einer 1:1-Beziehung ist jedem Datensatz in Tabelle A nur ein passender Datensatz in Tabelle B zugeordnet und umgekehrt. Diese Art von Beziehung ist nicht sehr häufig, weil die meisten Informationen, die auf diese Weise in Beziehung stehen, sich in einer Tabelle befinden. Sie können eine 1:1-Beziehung z.B. verwenden, um eine Tabelle mit vielen Feldern zu teilen, um einen Teil der Tabelle aus Gründen der Zugriffsrechte abzutrennen, oder um Informationen zu speichern, die sich nur auf eine Untergruppe der Haupttabelle beziehen. Sie können z.B. eine Tabelle erstellen, die nur die Angestellten enthält, die an einem für einen guten Zweck ausgerichteten Fußballspiel teilnehmen.(In dieser Beziehug haben beide Primärschlüssel den Wert Auto Wert)

Welche Art von Beziehung Microsoft Access erstellt, hängt davon ab, wie die in Beziehung stehenden Felder definiert sind:

Eine 1:n-Beziehung wird hergestellt, wenn nur eines der in Beziehung stehenden Felder ein Primärschlüssel ist oder einen eindeutigen Index besitzt. (die Betonung liegt hier auf IN BEZIEHUNG STEHENDER FELDER). Deshalb muß die Dritte Tabelle nich unbedingt einen Autowert als Primärschlüssel besitzen, sondern es genügt der Felddatentyp Zahl. Als Feldgröße wird Long Integer genommen, und bei der Option INDIZIERT wählt man ja ohne Duplikate (sonst kann man es niccht als Primärschlüssel verwenden)

Eine 1:1-Beziehung wird hergestellt, wenn beide in Beziehung stehenden Felder Primärschlüssel sind oder über eindeutige Indizes verfügen.

Eine m:n-Beziehung besteht eigentlich aus zwei 1:n-Beziehungen mit einer dritten Tabelle, deren Primärschlüssel aus zwei Feldern besteht, und zwar den Fremdschlüsseln aus den beiden anderen Tabellen.

Wenn man ein Feld, das kein Primärschlüssel ist und keinen eindeutigen Index besitzt, auf ein Feld zieht, das ebenfalls kein Primärschlüssel ist und keinen eindeutigen Index besitzt, wird eine unbestimmte Beziehung erstellt. In Abfragen, die Tabellen mit einer unbestimmten Beziehung besitzen, zeigt Microsoft Access eine Standardverknüpfungslinie zwischen den Tabellen an, aber die referentielle Integrität wird nicht durchgesetzt, und es gibt keine Garantie, daß die Datensätze in den Tabellen eindeutig sind.

Was ist referentielle Integrität?

Referentielle Integrität ist ein Regelsystem, mit dessen Hilfe Microsoft Access sicherstellt, daß Beziehungen zwischen Datensätzen in Detailtabellen gültig sind und daß verknüpfte Daten nicht versehentlich gelöscht oder geändert werden. Sie können referentielle Integrität festlegen, wenn alle folgenden Bedingungen erfüllt sind:

Das übereinstimmende Feld aus der Mastertabelle ist ein Primärschlüssel oder hat einen eindeutigen Index. (Auto Wert)

Die Detailfelder haben denselben Datentyp. Allerdings gibt es zwei Ausnahmen: Ein Feld des Datentyps AutoWert kann mit einem Feld des Datenyps Zahl verknüpft werden, dessen Eigenschaft Feldgröße auf Long Integer eingestellt ist. Ein Feld des Datentyps AutoWert kann mit einem Feld des Typs Zahl verknüpft werden, wenn die Eigenschaft Feldgröße beider Felder auf Replikations-ID eingestellt ist. (Aber: Auto Wert verknüpfen mit Autowert gibt immer eine 1:1 Beziehung - das muß man unbedingt vermeiden)

Beide Tabellen gehören zu derselben Microsoft Access-Datenbank. Handelt es sich dabei um verknüpfte Tabellen, müssen diese über das Microsoft Access-Format verfügen. Um referentielle Integrität festzulegen, öffnen Sie die Datenbank, in der die Tabellen gespeichert sind. Referentielle Integrität kann nämlich nicht für verknüpfte Tabellen aus Datenbanken anderer Formate durchgesetzt werden.

Beim Durchsetzen referentieller Integrität beachten Sie folgende Regeln:

Sie können in das Fremdschlüsselfeld der Detailtabelle keinen Wert eingeben, der nicht im Primärschlüsselfeld der Mastertabelle enthalten ist. Sie können jedoch in das Fremdschlüsselfeld einen Nullwert eingeben und damit angeben, daß die Datensätze nicht miteinander verknüpft sind. So ist es z.B. nicht möglich, eine Bestellung zu haben, die einem nichtvorhandenen Kunden zugeordnet ist. Sie können jedoch eine Bestellung haben, die niemandem zugeordnet ist, indem Sie in das Feld Kunden-Nr einen Nullwert eingeben.

Sie können keinen Datensatz aus der Mastertabelle löschen, wenn übereinstimmende Datensätze in einer Detailtabelle enthalten sind. Beispielsweise können Sie einen Datensatz eines Mitarbeiters aus der Tabelle Personal nicht löschen, wenn diesem Mitarbeiter in der Tabelle Bestellungen Bestellungen zugeordnet sind.

Sie können keinen Primärschlüsselwert in der Mastertabelle ändern, wenn es zu diesem Datensatz Detaildatensätze gibt. Beispielsweise können Sie die Personalnummer eines Mitarbeiters in der Tabelle Personal nicht ändern, wenn diesem Mitarbeiter in der Tabelle Bestellungen Bestellungen zugeordnet sind.

Falls Microsoft Access diese Regeln für eine Beziehung durchsetzen soll, aktivieren Sie das Kontrollkästchen Mit referentieller Integrität, wenn Sie die Beziehung erstellen. Wird die referentielle Integrität für Detailtabellen durchgesetzt und dabei gegen eine dieser Regeln verstoßen, zeigt Microsoft Access eine Meldung an und läßt die Änderung nicht zu. (Hierzu ist unbedingt! eine 1:n Beziehung werforderlich)

Sie können die Einschränkungen beim Löschen bzw. Ändern von Detaildatensätzen außer Kraft setzen und dennoch referentielle Integrität wahren, indem Sie die Kontrollkästchen Aktualisierungsweitergabe an Detailfeld und Löschweitergabe an Detaildatensatz aktivieren. Ist das Kontrollkästchen Aktualisierungsweitergabe an Detailfeld aktiviert, wird beim Ändern eines Primärschlüsselwerts in der Mastertabelle der damit übereinstimmende Wert in allen Detaildatensätzen automatisch aktualisiert. Ist das Kontrollkästchen Löschweitergabe an Detaildatensatz aktiviert, werden beim Löschen eines Datensatzes in der Mastertabelle alle Detaildatensätze in der Detailtabelle ebenfalls automatisch gelöscht.

Warum werden Aktualisierungsweitergaben oder Löschweitergaben verwendet?

Bei Beziehungen, in denen referentielle Integrität durchgesetzt wird, können Sie angeben, ob Microsoft Access für Detaildatensätze automatisch Aktualisierungsweitergaben und Löschweitergaben durchführen soll. Wenn Sie diese Optionen setzen, sind Lösch- und Aktualisierungsoperationen zulässig, die normalerweise durch die Regeln referentieller Integrität verhindert werden. Wenn Sie in einer Mastertabelle Datensätze löschen oder Primärschlüsselwerte ändern, führt Microsoft Access die erforderlichen Änderungen in den verknüpften Tabellen (Detailtabellen) aus, um die referentielle Integrität zu wahren.

Wenn Sie beim Definieren einer Beziehung das Kontrollkästchen Aktualisierungsweitergabe an Detailfeld aktiviert haben, aktualisiert Microsoft Access bei jeder Änderung des Primärschlüssels eines Datensatzes der Mastertabelle automatisch den Primärschlüssel in allen Detaildatensätzen auf den neuen Wert. Ändern Sie z.B. in der Tabelle Kunden eine Kundennummer, wird das Feld Kunden-Code in der Tabelle Bestellungen automatisch für alle Bestellungen dieses Kunden aktualisiert, damit die Beziehung erhalten bleibt. Microsoft Access gibt Aktualisierungen ohne vorherige Anzeige einer Meldung weiter.

Anmerkung Handelt es sich beim Primärschlüssel der Mastertabelle um ein Feld des Datentyps AutoWert, hat das Aktivieren des Kontrollkästchens Aktualisierungsweitergabe an Detailfeld keine Wirkung, da der Wert in einem Feld des Datentyps AutoWert nicht geändert werden kann.

Wenn Sie beim Definieren einer Beziehung das Kontrollkästchen Löschweitergabe an Detaildatensatz aktiviert haben, löscht Microsoft Access bei jedem Löschen von Datensätzen in der Mastertabelle automatisch die Detaildatensätze in der Detailtabelle. Löschen Sie z.B. einen Kundendatensatz aus der Tabelle Kunden, werden automatisch alle Bestellungen dieses Kunden aus der Tabelle Bestellungen gelöscht (dies schließt Datensätze in der Tabelle Bestelldetails ein, die mit den Bestelldatensätzen verknüpft sind). Wenn Sie Datensätze aus einem Formular oder Datenblatt löschen und das Kontrollkästchen Löschweitergabe an Detaildatensatz aktiviert ist, gibt Microsoft Access die Warnung aus, daß Detaildatensätze ebenfalls gelöscht werden können. Wenn Sie Datensätze jedoch unter Verwendung einer Löschabfrage löschen, löscht Microsoft Access automatisch die Datensätze in den Detailtabellen, ohne zuvor eine Warnung anzuzeigen.

Danach kann man durch eine Abfrage eine neue Tabelle erstellen.

Erstellen einer neuen Tabelle auf der Basis vorhandener Daten

Microsoft Access bietet zwei Möglichkeiten zum Erstellen einer Tabelle auf der Basis vorhandener Daten

Sie können Daten aus einer anderen Microsoft Access-Datenbank oder Daten in unterschiedlichen Dateiformaten aus anderen Programmen importieren bzw. miteinander verknüpfen.

Sie können eine Tabellenerstellungsabfrage ausführen, um eine Tabelle auf der Basis der Daten der aktuellen Tabelle zu erstellen. Sie können z.B. Tabellenerstellungsabfragen verwenden, um alte Datensätze zu archivieren, Sicherungskopien von Ihren Tabellen zu erstellen, eine Gruppe von Datensätzen für den Export in eine andere Datenbank auszuwählen oder um auf ihrer Grundlage Berichte zu erstellen, in denen Daten eines bestimmten Zeitraums angezeigt werden. (oder eben auch um in dieser Tabelle Berechnungen durchzuführen)

Erstellen einer neuen Tabelle aus den Ergebnissen einer Abfrage mit einer Tabellenerstellungsabfrage

Erstellen Sie eine Abfrage auf der Basis der Tabellen oder Abfragen, die die Datensätze enthalten, mit denen Sie die neue Tabelle erstellen möchten.

Klicken Sie in der Abfrage-Entwurfsansicht in der Symbolleiste auf den Pfeil neben der Schaltfläche Abfragetyp, und klicken Sie dann auf Neue Tabelle erstellen. Jetzt wird das Dialogfeld Neue Tabelle erstellen angezeigt.

Geben Sie im Feld Tabellenname den Namen der Tabelle ein, die Sie erstellen oder ersetzen möchten.

Klicken Sie auf Aktuelle Datenbank, um die neue Tabelle der gerade geöffneten Datenbank hinzuzufügen, oder klicken Sie auf Andere Datenbank, und geben Sie den Namen der Datenbank ein, der Sie die neue Tabelle hinzufügen möchten. Geben Sie ggf. den Pfadnamen zu dieser Datenbank ein.

Klicken Sie auf OK.

Ziehen Sie die Felder, die Sie der neuen Tabelle hinzufügen möchten, aus der Feldliste in den Abfrage-Entwurfsbereich.

Geben Sie in die Zelle Kriterien der Felder, die Sie in den Entwurfsbereich gezogen haben, Kriterien ein.

Erstellen eines Feldes, das in einer Abfrage benutzerdefinierte Berechnungen durchführt oder Feldwerte bearbeitet

Sie können ein neues Feld erstellen, das die Ergebnisse einer Berechnung, die Sie über einen Ausdruck definiert haben, anzeigt.

Öffnen Sie die Abfrage in der Entwurfsansicht.

Führen Sie einen der folgende Schritt durch:

Geben Sie einen Ausdruck in eine leere Zelle der Zeile Feld ein. Wenn im Ausdruck ein Feldname enthalten ist, müssen Sie diesen in eckige Klammern setzen.

Wenn Sie beim Erstellen des Ausdrucks Hilfe benötigen, verwenden Sie den Ausdrucks-Editor. Um ihn anzuzeigen, klicken Sie mit der rechten Maustaste auf die Zeile Feld, in die Sie das berechnete Feld einfügen, und klicken Sie dann auf Erstellen.

Nachdem Sie die EINGABETASTE gedrückt haben oder zu einer anderen Zelle gegangen sind, gibt Microsoft Access den Standardfeldnamen AusdrN ein, wobei N eine ganze Zahl darstellt, die für jedes neue Ausdrucksfeld der Abfrage um 1 erhöht wird. Der Name, dem ein Doppelpunkt folgt, wird vor dem Ausdruck angezeigt. Im Datenblatt stellt dieser Name die Spaltenüberschrift dar.

Sie können AusdrN durch einen aussagekräftigeren Namen, wie z.B. NeuerPreis, ersetzen.

Wenn der Ausdruck eine oder mehrere Aggregatfunktionen (Summe, Mittelwert, Anzahl, Min, Max, StdAbw oder Varianz) enthält und sich im Entwurfsbereich ein anderes Feld oder mehrere andere Felder befinden, die Sie zum Gruppieren verwenden möchten, klicken Sie in der Symbolleiste auf Funktionen (es sei denn, die Zeile Funktion wird bereits angezeigt). Lassen Sie in der Zeile Funktion das Gruppierungsfeld Gruppierung stehen, und ändern Sie im berechneten Feld Gruppierung in Ausdruck.

Sie haben folgende Möglichkeiten, die Abfrage gegebenenfalls zu vervollständigen:

Geben Sie Kriterien ein, um die Berechnung zu beeinflussen.

Sortieren Sie das Ergebnis

Legen Sie Feldeigenschaften, wie z.B. Format, fest (da das Feld nicht die Eigenschaften der zugrundeliegenden Tabelle übernimmt).

Soweit steht das übrigens alles in der Access Hilfe - und danach sollte man gehen.

Nun noch ein paar Kleinigkeiten, die nicht jeder kennt, aber relevant für jede Datenbank sind:

Datenbanken soll man so klein halten wie möglich. Das heißt man soll nur die Tabellen, Abfragen, Formulare, Berichte, Makros und Module anlegen, die man unbedingt benötigt. Sonst wird die Datenbank zu langsam! Im Zweifelsfall sollte man im Menü EXTRAS | ANALYSE | LEISTUNG den Leistungsassistenten zu Rate ziehen. Damit keine gleichen Schlüssel für verschiedene Kunden vergeben werden, sollte das Feld in der »Haupttabelle« immer vom Datentyp »Zähler« oder »AutoWert« und als Primärschlüssel definiert sein. Access sorgt dann automatisch dafür, daß eindeutige Schlüssel/Kundennummern beim Anlegen neuer Datensätze verwendet werden.

In den »Untertabellen« für die Zusatzinformationen kommt der gleiche Feldname zum Einsatz, hier wird jedoch der Datentyp »Long Integer« eingestellt. Es dürfen dort keine Schlüssel automatisch erstellt werden, da die Synchronisierung über Abfragen/Unterformulare erfolgt!

Bei einer manuellen Verwaltung der Kundennummer besteht die Gefahr, daß Nummern doppelt vergeben werden. Das darf, vor allem beim Einsatz im Netzwerk, nicht unterschätzt werden.

Für die manuelle Verwaltung sind immer irgendwelche Aufzeichnungen notwendig, die sich erfahrungsgemäß bei mehreren Benutzern einer Datenbank nie exakt synchronisieren lassen.

Die zu speichernden Informationen lassen sich in der Regel in verschiedene Bereiche gliedern und so mehreren Tabellen zuordnen. Die Bearbeitung erfolgt dann über entsprechend verknüpfte Formulare/Unterformulare.

Das hat mehrere Vorteile:

Übersichtlichere Verwaltung/Pflege der Datenbank durch überschaubare Tabellen

Flexiblere Erweiterungsmöglichkeiten durch Anlegen neuer Tabellen für zusätzliche Informationen

Schnellerer Zugriff auf die Tabellen durch kleinere Datensätze

Einfachere Aufteilung der Informationen auf Formulare und Unterformulare

Übersichtlichere Präsentation der Informationen in Formularen

Gruß Albert

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Albert !

Vielen Dank für diese riesige Antwort. Und auch für den Workshop, den du mir geschickt hast. Hätte mich ganz gerne per Mail bei dir bedankt, aber Outlook will meine geschriebenen Mails partout nicht abschicken. . .

Vielen Dank auch an Dich TomH !

MfG
Maik