Hallo erstmals,
ich scheitere schon am Titel, weiss nicht wirklich wie ich das nennen solle :-)
Ich wollte eine kleine Access-DB erstellen, wirklich nur was kleines... Dachte ich zumindest :o
Jetzt ist die gewachsen und ich krieg es nicht mehr auf die Reihe mein Problem zu lösen.
Ich hab vier Tabellen (Siehe Anhang)
Mein Ziel:
Ich möchte in der Tabelle allocation eine Zuweisung erstellen. Diese Tabelle ist aktuell leer.
Angenommen ich hab in der Tabell Department zwei Einträge
DEP1
DEP2
Und in der Tabelle Bestand angenommen 5 Artikel
ARTIKEL1
ARTIKEL2
....
Dann möchte ich ein Formular erstellen dass in etwa wie folgt ausschaut:
DEP1 - ARTIKEL1
DEP1 - ARTIKEL2
DEP1 - ARTIKEL3
DEP1 - ARTIKEL4
DEP1 - ARTIKEL5
DEP2 - ARTIKEL1
DEP2 - ARTIKEL2
DEP2 - ARTIKEL3
DEP2 - ARTIKEL4
DEP2 - ARTIKEL5
Und hier möchte ich dann im Formular für alle diese Einträge die Checkboxen für "Allow" und "Max" haben (Siehe tbl-allocation)
Ich hab's schon mit mehreren "gekreuzten" Abfragen hingekriegt, wenn ich dann aber was ankreuze kommt die Meldung "Diese Datensatzgruppe kann nicht aktualisiert werden"
Meine nächste Frage wäre dann: Wie schaffe ich es dass es dann mit ID in die tabelle allocation eingetragen wird? (Angenommen DEP1 hat Abt_ID 7 und Artikel 5 hat die ID 100. Ich fülle aus "Allow=TRUE", MAX="FALSE", müsse folgendes rein
100, 7, TRUE, FALSE
Hintergrund: Angenommen ich erfasse irgendwann Department XY, dann soll ich via dem Formular auf DEP XY zugreifen können , erhalte eine Liste aller Bestände und kann dann die Felder Allow und Max ausfüllen. Sobald ich dann Beispielsweise für DEP XY und Artikel999 etwas eintrage, soll es mir das in die
Könnt ihr mir vielleicht helfen?
Liebe Grüsse
/E die Joins in dem Anhang sind nicht "gesetzt" - ich hatte auch mal nur INNER-Joins, hatte auch schon zwei Left-Joins ...
Ich bin auch offen für Anregungen wie man das anderst lösen könnte...
Hallo,
die Zuweisung von Dep zu Artikel kann ja nicht automatisch gehen, das musst Du selbst machen. Access weiß das ja nicht. Dazu verwendet man ein Hauptformular für die Darstellung der Departments und darin ein über die Schlüsselfelder verknüpftes Unterformular (Tab.: Bestand).
Du kannst dann im Ufo die zum Dep. gehörenden Artikel auswählen. Du brauchst dazu keine extra Abfrage. Die Formulare werden an die jeweiligen Tabellen gebunden.
Es ist auch keinerlei Programmierung erforderlich.
Im Beziehungsfenster stellt man immer INNER JOIN ein und unbedingt referentielle Integrität.
Was verstehst Du überhaupt unter Bestand, da verstehe ich erst mal eine Menge darunter.
PS:
Von Sonderzeichen aller Art (außer _) würde ich in Feld und Objektnamen Abstand nehmen. Und die Datentypkürzel (Int, Str, Cur...) vor Feldnamen sind so überflüssig wie ein Kropf und eher hinderlich als nützlich.
Mir missfällt die Datenstruktur.
Eine Abteilung wird Artikel (Produkte) in ihrem Sortiment haben (ggf. unter Angabe von Mindest- und Maximalbestand, sowie empfohlener Bestellmenge, und ggf. weiteren Angaben). Ebenso wird sie in Transaktionen zu einem Zeitpunkt Sortimentsartikel in definierten Mengen erhalten (einkaufen, produzieren, dem Lager entnehmen, o.ä.) und zu einem anderen Zeitpunkt diese wieder abgeben (verkaufen, verleihen, verbrauchen, entsorgen, o.ä.). Aus dieser Transaktionen lässt sich jederzeit, sofern die Tabellen richtig gepflegt werden und keine falschen Zahlen eingetragen werden, jederzeit der Sortimentsbestand in einer Abfrage einsehen.
Eine Reservierung wäre auch eine Transaktion, bei der jedoch bis zur eigentlichen Lieferung keine Bestandsänderung eintritt.
Ich hoffe, die Gegebenheiten einigermaßen richtig interpretiert zu haben.
Hallo,
wobei ja noch gar nicht sicher ist, ob überhaupt ein Bestand (als Menge) geführt werden soll, davon war ja keine Rede außer der Tabelle Bestand, was ja nur eine Tabelle sein könnte die zeigt, welches Dep. welche Artikel hat. Dann reicht das Datenmodell.
Daher ja auch meine Frage was der Bestand sein soll.
Guten Morgen,
danke schonmal für eure Antworten.
Zitat von: MzKlMu am Juli 27, 2016, 17:18:22
Im Beziehungsfenster stellt man immer INNER JOIN ein und unbedingt referentielle Integrität.
Ergibt eigentlich Sinn. Hab ich so umgestellt.
Zitat von: MzKlMu am Juli 27, 2016, 17:18:22
Von Sonderzeichen aller Art (außer _) würde ich in Feld und Objektnamen Abstand nehmen. Und die Datentypkürzel (Int, Str, Cur...) vor Feldnamen sind so überflüssig wie ein Kropf und eher hinderlich als nützlich.
Das mit dem Datentypkürzel kommt bei mir weil ich aus der Programmierecke komme, ist so eine angewohnheit :) Werde ich mir aber merken.
Zitat von: MzKlMu am Juli 27, 2016, 17:18:22
Was verstehst Du überhaupt unter Bestand, da verstehe ich erst mal eine Menge darunter.
Zitat von: Lachtaube am Juli 27, 2016, 17:27:51
Ich hoffe, die Gegebenheiten einigermaßen richtig interpretiert zu haben.
--> Sorry, ich hätte euch da, wie ich sehe, mehr Info's geben sollen. @Lachtaube, schöne Denkansätze aber die gehen schon viel weiter als wie meine kleine DB :)
Ich habe mehrere Abteilungen und ein Materiallager.
Im Lager hat es Stifte, Locher, usw...
Die Abteilungen sollen nun via Access ein Bestellformular ausfüllen dürfen. Es darf aber nicht jede Abteilung die gleichen Sachen bestellen und es darf auch nicht jede Abteilung gleich viel bestellen.
Beispiel:
Abteilung A darf Stifte jeglicher Art bestellen und davon jeweils 5.
B auch aber die dürfen jeweils 10.
Locher darf nur Abteilung A bestellen und davon maximal 3.
Das müsste dann in die Tabelle allocation (Habe im INIT-Eintrag fälschlicherweise von zwei Booleans geredet, das soll natürlich ein Bool und ein INT sein)
Abt. A - Stifte - TRUE - 5
Abt. B - Stifte - TRUE - 10
Abt. A - Locher - TRUE - 3
Abt. B - Locher - FALSE - 0
Aus dieser Tabelle werde ich dann ein Formular bereitstellen für die Abteilungen. Darauf ist dann nur ihr Zeug ersichtlich und auch nur die Positionen die Ihnen zugeteilt wurden. Das Mengenfeld wird mittels maximalmenge eingeschränkt. Das steht soweis aber schon.
Die Tabelle allocation möchte ich (initial) einfach leer lassen. Es soll in meiner Abfrge die ich am aufbauen bin anhand aller Abteilungen und aller bereits erfassten Materialien eine Liste erstellen. Der Admin kann dann via Formular die Werte anpassen.
Material | SHOW | MAX-VALUE
Trage ich hier was ein müsste es dann direkt in die Tabelle Allocation rein :)
Ich hoffe dass ich es jetzt deutlicher Beschrieben habe.
Mit den Unterformularen hab ich es auch schon versucht, das hat mir aber auch nicht funktioniert. Ich vermute mal dass ich da ein wenig auf dem Schlauch stehe...
Ich komm dem Ziel näher...
das mit der Unterabfrage ist ganz schön cool, hab ich so bisher (leider) noch gar nie benutzt...
(http://www.bergers.li/2016-07-28_162231.png)
Das hab ich jetzt schon. Das wär auch schon "fast" richtig
Ich möchte dass mir dort jetzt für jeden Artikel der bereits besteht eine Zeile angezeigt wird. Sobald ich dann bei Allow oder MAX etwas eintrage soll es dann in die allocation-Tabelle rein.
Ich hab jetzt die Tabelle Department genommen, ein Formular erstellt und im Unterformular die Verknüpfung zu tbl-allocation gezogen.
Ich weiss jetzt aber nicht wie ich da noch den Bestand reinkriegen soll. Dass das so nicht klappt ist mir klar, ist ja nicht verknüpft. Aber ich weiss nicht wo dass ich das verknüpfen kann / soll :)
Vielen vielen dank schon mal !
Hallo,
willst Du wirklich alle Materialen allen Abteilungen automatisch zuordnen ?
Wie viele Datensätze sind denn jeweils in diesen Tabellen ?
Hallo Raber,
ZitatDann möchte ich ein Formular erstellen dass in etwa wie folgt ausschaut:
DEP1 - ARTIKEL1
DEP1 - ARTIKEL2
DEP1 - ARTIKEL3
DEP1 - ARTIKEL4
DEP1 - ARTIKEL5
DEP2 - ARTIKEL1
DEP2 - ARTIKEL2
DEP2 - ARTIKEL3
DEP2 - ARTIKEL4
DEP2 - ARTIKEL5
Nein, du brauchst eine Tabelle, die so aussieht; - plus die Felder "erlaubt" und "Max".
Department -> DepartmentArtikel <- Artikel
Diese Tabelle ist dann die DS-Herkunft des UFo-Forms. Aus dem Textfeld "Art_ID"
machst du ein Kombi mit DS-Herkunft "Artikel". Damit wählst Du die erlaubten Artikel
aus. Wozu, wie Klaus schreibt alle Artikel allen Abt. zuordnen, wenn die eh nur teilweise
erlaubt sind. So wie oben beschrieben kannst du sogar auf das Feld "erlaubt" verzichten.
Was keine Zuordnung hat ist auch nicht erlaubt , braucht also auch nicht angezeigt zu werden.
Wenn ich alles richtig verstanden habe.
gruss ekkehard
Hallo,
@ekkehard
Die Tabelle hat er schon (allocation) mit den erforderlichen Feldern.
Es geht jetzt nur darum ob wirklich alle Artikel zu allen Abteilungen automatisch zugeordnet werden sollen. Das wäre durchaus von Vorteil, dann bräuchte man nu anzuhaken und kann auch ganz leicht bei Bedarf Änderungen machen.
Daher mal meine Frage nach den Datensatzzahlen. Denn alle Artikel zu jeder Abteilung multiplizieren sich ja die Datensätze in der Tabelle Allocation.
Genau das möchte ich (@MzKlMu)
Wir reden hier von einer Datenmenge von 4 - 5 Abteilungen und an die 100 Artikel. Sprich, so an die 400-500 Datensätze. Denke da sollte Access locker mit klarkommen. (Oder was meint ihr?)
Und es geht mir da effektiv darum dass das einfach gehalten wird. Ich hätte natürlich auch die Möglichkeit zu sagen.
1.) Artikel werden erfasst. Sagen wir mal Stifte in den Farben Blau, Grün, Gelb, Rot, Schwarz, Pink.
2.) Zuordnung wird gemacht. Dafür wird die das Formular wie in meinem Screenshot eröffnet, Stift Blau wird ausgewählt und Abt. 1. Dann die Zuordnung. Dann wird Abt. 2 ausgewählt und wieder die Zuordnung.
Bei 6 Stiften die erfasst werden und 4-5 Abteilungen müsste ich also 24 - 30 Datensätze eintragen (und jedes Mal auswählen - Stift Blau, diese Werte, Stift XY, jene Werte)
Deswegen würde ich es lieber so haben.
1.) Artikel werden erfasst. Sagen wir mal Stifte in den Farben Blau, Grün, Gelb, Rot, Schwarz, Pink.
2.) Formular wird geöffnet. Es wird die Abteilung ausgewählt (Wie im Screenshot ersichtlich). Und dann, wie es MzKlMu auch erwähnt hat, kann angehakt weren.
ich kann jetzt in der Abteilung relativ schnell alle eben erfassten Farben durchgehen, diese anhaken und auch die Max Menge eintragen. Nächste Abteilung und gut ist. So muss ich genau 4-5 mal den Datensatz wechseln (Je nach Anzahl Abteilungen)
Die andere Idee die ich hatte (aber vermeiden möchte)
Sobald eine Abteilung oder ein Artikel erfasst (oder gelöscht) wird, läuft ein Update / Delete Statement durch und erfasst die "leeren" Einträge in der DB.
Hallo,
diese Abfrage:
INSERT INTO tblAllocation ( IDArtikel_F, IDDepartment_F )
SELECT IDArtikel, IDDepartment
FROM tblArtikel, tblDepartment
fügt alle Artikel für alle Abteilungen auf einen Schlag an die Tabelle "tblAllocation" an.
In der Tabelle tblAllocation muss über die Felder IDArtikel_F und IDDepartment_F ein zusammengesetzter eindeutiger Index gelegt werden, sonst könnte aus Versehen die Zuordnung mehrfach erfolgen.
Zur Beachtung:
Keine Leer und Sonderzeichen in Feldnamen verwenden. Die Fremdschlüsselfelder sind mit _F gekennzeichnet.
Danke, das wäre schon mal funktional. Ich könnte so bei jedem Update (Material oder Abteilung) das Teil laufen lassen.
Seht ihr keine Möglichkeit via Formular? Oder ist das dann eher "ungeschickt" ?
Hallo Raber,
ZitatSeht ihr keine Möglichkeit via Formular? Oder ist das dann eher "ungeschickt" ?
Nein, für die Erfassung weiterer (neuer) Abt./Artikel ist das dann genau
der richtige Weg. Beim Artikel-Form bzw. Abt.-Form kannst du das bei
einer Neuanlage gleich automatisch erledigen lassen. Beim Artikel wird
dieser für alle Abt. in die allocation-Table geschrieben, und bei der Abt.
werden alle Artikel dort eingetragen. Dazu musst du dann nur Klaus'
Anfüge-Abfrage entsprechend anpassen, und ausführen.
gruss ekkehard
So, jetzt hat's geklappt :)
Ich hab's jetzt so gelöst.
Beim erfassen von einer neuen Abteilung oder von einem neuen Artikel läuft folgende Query
IDArtikel_F und IDDepartment_F ist der Composite Key
INSERT INTO tblAllocation ( IDArtikel_F, IDDepartment_F )
SELECT IDArtikel, IDDepartment
FROM tblbestand, tblDepartment
WHERE not exists (
select IDArtikel_F, IDDepartment_F FROM tblallocation
where tblbestand.IDArtikel=tblallocation.IDArtikel_F
and tblDepartment.IDDepartment=tblallocation.IDDepartment_F);
Sobald ich was lösche greift die Beziehung und die Einstellung "Löschweitergabe an verwandte Datensätze"
Jetzt ruf ich einfach ein Formular auf und zeig die jeweilige Abteilung an. Ich kann somit "durchkreuzeln"
Perfekt! Vielen vielen Dank an alle!
Liebe Grüsse
Berger