PDA

Vollständige Version anzeigen : Feldinhalt determinieren


RKS1
27.10.2011, 11:49
Hallo!

Ich muss mich von vornherein entschuldigen. Ich bin absoluter Neuling in Access und mit den Begrifflichkeiten nicht sehr vertraut. Es mag auch sein, dass erfahrene Access-Leute über meine Lösung nur den Kopf schütteln :-)
Daher hätte ich gerne die Suchfunktion genutzt, wusste aber nicht, was ich dort eintragen sollte..... Sorry!

Also, zum Thema.
Ich habe drei Tabellen. In einer Tabelle (Tabelle1) wird gekauftes Material (zum Basteln) eingetragen. Also unter anderem eine Bezeichnung und unter anderem ein Preis pro Einheit.
In einer weiteren Tabelle (Tabelle2) befinden sich u.a. die Namen der Bastelein usw. Ich möchte dort aber nicht eintragen, welches Material ich verwendet habe. Also habe ich noch eine dritte Tabelle kreiert (Material_Zuordnung).

In dieser Tabelle wird jeder Bastelei aus Tabelle2 ein Material aus Tabelle1 zugeordnet. Gleichzeitig möchte ich auch zuordnen, wie viel Material jeweils verbraucht wurde und - ganz entscheidend - welche Kosten dafür anfallen.

Über eine Beziehung wähle ich also aus Tabelle2 den Namen und aus Tabelle1 die Bezeichnung des Materials aus. Dann möchte ich, dass automatisch der "Preis pro Einheit" ebenfalls aus Tabelle2 in die Tabelle "Material_Zuordnung" übernommen wird (Beispiel s.u.); und zwar so, dass er nicht manuell veränderbar ist. Natürlich soll dann dieser Preis pro Einheit in dieser Tabelle mit der jeweiligen Menge multipliziert werden, um die Kosten des jeweiligen Materialeinsatzes zu errechnen.

___

Beispiel:

Tabelle1:

Bezeichnung Preis pro Einheit
__________________________
Stoff 2€
Leder 10€


Tabelle2:

Name Feld2 Feld3
__________________________
Stoffbeutel blabla blabla
Lederbeutel blabla blabla


Material_Zuordnung:

Name Bezeichnung Preis pro Einheit Menge Summe
__________________________________________________________
Stoffbeutel Stoff 2€ 10 20
Lederbeutel Leder 10€ 20 200



Vielen Dank im Voraus!!! ;)

Grüße,
Konst

maikek
27.10.2011, 12:05
Moin,
die drei Tabellen sind schon völlig ok. So etwas nennt man eine m:n Beziehung (viele zu viele). Ich hoffe, du hast in diesen Tabellen Primärschlüssel und überträgst nicht einfach Textwerte?
Alles außer der Menge kannst du dir dann problemlos im Formular oder Bericht berechnen und anzeigen lassen, das gehört nicht in die Tabelle.
Wo dein konkretes Problem liegt, kann ich in deinem Post allerdings nicht erkennen.
Schau dir mal diesen Link hier an, vielleicht hilft dir das weiter:
DBWiki, m:n Beziehungen auflösen (http://dbwiki.net/wiki/Access_Design:_m:n-Beziehungen_aufl%C3%B6sen).
Sonst nochmal fragen.
maike

Atrus2711
27.10.2011, 12:13
Hi,

der Aufbau der Tabellen klingt plausibel. Die Tabellen sollten allerdings ordentliche Namen bekommen, z.B. "Material", "Produkte" (Basteleien) und "Rezepte" (wieviel-wovon-Zeilen). Außerdem solltest du für jede Tabellen einen Primärschlüssel vergeben, typischerweise einen Autowert.

Mit Angabe des Materials in einer Rezeptzeile steht auch der Preis dieses Materials fest. Die x-fache Menge bei x Materialeinheiten wäre mit einer Abfrage auszurechnen; diese Angabe ist - wie alle Berechnungen - typischerweise nicht in einer Tabelle abzulegen.

Optisch schön wird das ganze bei Nutzung von Formularen; da könnten z.B.

die Produkte ein Hauptformular bilden
die Rezepte (wieviel-wovon-Zeilen) ein Unterformular darstellen. Das Material der jeder zeile (Wovon) wird dann durch eine Kombobox angeboten.

RKS1
27.10.2011, 16:31
Hallo! Vielen Dank für die schnellen Antworten und auch für die Links (auch in der Signatur!)

Was ich speziell möchte ist nun folgendes: Wähle ich aus "Material_Zuordnung" im Feld Bezeichnung "Stoff" aus, soll automatisch im Feld "Preis pro Einheit" die "2€" erscheinen (aus Tabelle1 "importiert")

Vielen Dank!

Atrus2711
27.10.2011, 16:58
wie erwähnt, ist das nicht sinnvoll, da die Preise bei evtl. Änderungen an zwei Stellen geändert werden müssten. Aber es ist möglich. Richte ein Feld in der Tabelle ein, und nutze einer Aktualisierungsabfrage, die den Preis in dieses Feld einträgt.

Etwa:
UPDATE Rezepte INNER JOIN Material
ON Rezepte.F_Material_ID = Material.ID
SET Rezepte.Einzelpreis = Material.Einzelpreis

RKS1
28.10.2011, 19:25
Ahh, endlich verstehe ich auch, warum ihr gesagt habt, ich soll nicht in den Tabellen rechnen, sondern in den Formularen. Es ist toll, einen Geistesblitz dieser Art zu bekommen :-)

@Atrus: Ich verstehe nun wie gesagt, was du meintest. Aber dennoch hatte ich Schwierigkeiten, deine SQL-Anfrage einzupflegen :(

Ich möchte nun also über die Formulare rechnen. Daher dachte ich mir, dass es eine gute Sache ist, das Feld über den "Steuerinhalt" zu determinieren.
Dabei nutze ich folgende Funktion, eine Wenn-Funktion (vgl. Bild 1).
Die Formel habe ich mir sozusagen "zurecht geklickt" (mithilfe der "Ausdruckselemente").

Als entscheidene verknüpfte Tabelle dient hier dann das 2. Bild. Als Fehler kommen dann immer #Typ! oder eben #Name!...

Es tut mir schon ein bisschen Leid, dass ich eure Hilfe so beanspruche und ich mich vlt. etwas "ungünstig" anstelle :-/

Trotz allem, vielen Dank für alles bisher!
Grüße,
Konst

RKS1
29.10.2011, 09:23
Also, bezüglich des Formulars habe ich nun folgenden Steuerinhalt gefunden, der das Feld "determiniert":

=DomWert("[Preis_gesamt] / [Gekaufte_Menge]";"[Material]";"[Material].[ID] = " & [Material])


Vielen Dank für eure Hilfe! Thema erledigt :-)

gpswanderer
29.10.2011, 09:33
Hallo,
man durchaus darüber nachdenken, den Preis doch redundant in der Zwischentabelle ablegen. Die Preis können sich ja ändern. Wenn nur berechnet wird, wird ja für zurückliegende Datensätze der neue Preis genommen.
Mann sollte daher den Preis redundant speichern oder eine Preisliste mit Datum führen. Für die Berechnung des zum Zeitpunkt der Datensatzerstellung gültigen Preises muss dann das Datum des DS verwendet werden. Der Aufwand ist aber deutlich gößer.


PS:
Warum so eine Fremdwort (determiniert) ?
Ich musste, zugegeben erst mal nachschlagen, weis es aber immer noch nicht richtig, heist das bestimmen/Bestimmung?
Frage/Hinweis ist ernsthaft gemeint.

RKS1
29.10.2011, 11:28
gpswanderer: Vielen Dank für den Hinweis, ich werde ihn mal versuchen, umzusetzen :-)

und zum PS: Ich meinte damit, dass der Feldinhalt bestimmt bzw. erzwungen werden soll, also nicht durch eine Benutzereingabe erzwungen werden kann, sondern vom Datenbanksystem selbst bestimmt wird. Nun ja, ich wollte den Titel kurzfassen, um dennoch anzudeuten, worum es gehen könnte...