sollicitator
Goto Top

Access - Komplexe Abfragen mittels Formular aus mehreren Tabellen

Als Access Neuling habe ich trotz Suche in mehreren Foren und langes rumprobieren noch keine eigene Lösung für folgendes Problem erarbeiten können. Daher würde ich mich über jedweden Hinweis, der mir bei der Lösung hilft, freuen.

Folgendes zur Projektbeschreibung:
Ausgangslage:
Eine Exeltabelle, in der in der jeweilgen Spalte bestimmte Werte eingegeben werden
Spalte A - das Datum zu den entsprechenden Werten
Spalte B - eine Identifikationsnummer der Maschine
Spalte C - eine Identifikationsnummer der Person
Spalte D - die produzierte Stückzahl

Es kann vorkommen, dass pro Datum eine Maschine mehrfach benutzt wird
Es kann vorkommen, dass pro Datum eine Person mehrfach genannt wird

Ziel soll sein:
Eine Abfrage, die es ermöglicht Wochenweise folgende Werte zu filtern und anzuzeigen:
- Bei ausgewählter Identifikationsnummer der Person und der entsprechenden Kalenderwoche soll die gesamte (also summiert) von der Person produzierte Stückzahl ausgegeben werden
- Bei ausgewähltem Maschinenbereich und der Kalenderwoche soll die gesamte (ebenfalls summiert) produzierte Stückzahl des entsprechenden Manschinenbereiches ausgegeben werden

Folgendes habe ich bisher erarbeitet:
- eine Tabelle (in Access) die jedem Datum die entsprechende Kalenderwoche zuordnet
- eine Tabelle (in Access) die der jeweilgen Kalenderwoche wieder einen entsprechenden Datumsbereich zurück gibt (als Textfeld)
- eine Tabelle (in Access), die die Identifikationsnummer der Person mit Namen und Vornamen in Verbindung bringt
- eine Tabelle (in Access), die die Identifikationsnummer der Maschine einem jeweiligen Maschinenbereich zuweist.

Folgende Beziehungen der Tabellen habe ich hergestellt:
- Tabelle Kalenderwoche in Datumsbereich (Primärschlüssel = Kalenderwoche) ist verbunden mit der Tabelle Datum in Kalenderwoche (Primärschlüssel = Datum) verknüpft ist hierbei jeweils die Kalenderwochenspalte)
- Tabelle Datum in Kalenderwoche mit verknüpfter Ursprungsexceltabelle (Spalte Datum)
- Tabelle Identifikationsnummer der Person (Primärschlüssel = Identnr.) mit Ursprungsexceltabelle (Spalte Identnr. der Person)
- Tabelle Identnr. der Maschine (Primärschlüssel = Identnr. der Maschine) mit Ursprungsexceltabelle (Spalte Identnr der Maschine)


Soweit zur Theorie.

Was ich bisher geschafft hab war, dass ich eine Kalenderwoche eingeben konnte und mir der entsprechende Datumsbereich in einem weiteren Formularfeld zurückgegeben worden ist.
Aber das war eher ein Zufallstreffer - der Hintergrund (also warum das plötzlich so funktioniert) erschloss sich mir leider nicht.

Wie muss ich das Formular gestalten um oben beschriebenes Abbildern zu können?

Ergänzungen:
Verwendet wird zur Erstellung Access 2010 es soll aber auch unter Access 2007 bearbeitbar bleiben.

Zu den Beziehungen:
7121436940d1764135914a87631cadba

Die Tabelle "Schichtbuch" ist die importierte Tabelle, die regelmäßig aktualisiert wird.
Relevant sind dabei nur die verknüpften Spalten.
Die Berechnung soll aus der Spalte "Stückzahl Kopie" erfolgen.

So stelle ich mir am Ende das Formular vor:
1ff993a24f741f4f76f2cc84d422f78e

Im Feld Kalenderwoche soll eine Zahl eingegeben werden können (Meinetwegen auch als Rollbalkenmenü)
Dann soll angekreuzt werden, ob anch Mitarbeiter oder Bereich gefiltert werden soll (muss aber nicht unebdingt sein, wenn es nicht erforderlich ist)
Unter Mitarbeiter oder Bereich soll jeweils mit einem Rollbalkenmenü aus der Tabellenauswahl ausgewählt werden können (Also Personalliste und Bereiche)

Und im Feld Stückzahl soll dann das Ergebnis aufleuchten.

Content-Key: 179062

Url: https://administrator.de/contentid/179062

Printed on: April 26, 2024 at 23:04 o'clock

Member: RockNRolla69
RockNRolla69 Jan 17, 2012 at 14:56:29 (UTC)
Goto Top
Poste mal bitte ein Pic von deinen Beziehungen. Gefühlt fehlt mir noch eine Tabelle Produktion oder Auftrag oder sowas.
Aber poste erst mal pic pls. Bitte die Upload funktion aus dem Froum verwenden.
Member: sollicitator
sollicitator Jan 17, 2012 at 15:20:54 (UTC)
Goto Top
Die von dir geforderten Ergänzungen wurden am Ende des Startbeitrages angefügt.
Member: NetWolf
NetWolf Jan 17, 2012 at 16:05:49 (UTC)
Goto Top
Moin Moin,

die Tabellen Kalenderwoche und KW kannst du dir sparen, die sind überflüssig. Aus dem Datum bekommst du alle diese Informationen auch ohne Tabellen heraus. In der Tabelle "Bereiche" ist der Typ des Feldes Maschine hoffentlich eine Zahl?

Eigentlich hätte ich dir einen Bericht vorgeschlagen, um die Daten auszuwerten. Da du aber nur einzelne Werte benötigst, geht das mit der Funktion Dsum.
Es fehlt ein Button der die Berechnung ausführt. Alternativ kannst du bei Verlassen eines Feldes die Berechnung auch ausführen lassen.

DSUM hat den Syntax: DSUM("Felddassummiertwerdensoll","Tabellenname","Kriterien")

Also [Stückzahl Kopie] soll summiert werden, aus der Tabelle "Schichtbuch" und deine Kriterien kennst du ja.

Private Sub Wenn_Button_geklickt_wird (oder beim Verlassen eines jeden Feldes)
Dim Kriterien as String

'######### Kriterien zusammenbauen #########  
Kriterien = ""  
if Me.Kalenderwochenfeld > 0 then
Kriterien = Kriterien & "Format([Datum fortlaufend], "ww", vbMonday) = " & Me.Kalenderwochenfeld   
end if

if len(Me.Mitarbeiterfeld) > 0 then
Kriterien = Kriterien & iif(len(Kriterien)>0," and ","") & "Personalnummer fortlaufend = " & Me.Mitarbeiterfeld   
endif 

'usw. für alle deine Kriterien  
 
    Me.Summenfeld =  DSUM("Stückzahl Kopie","Schichtbuch",Kriterien)  

end Sub

Für Mitarbeiter und Bereich solltest du ein Pulldownfeld nutzen, dass die ID und nicht den Namen zurück gibt.
D.h. die Datenquelle für das Pulldownfeld ist z.B. Mitarbeiter.
Die erste Spalte ist gebunden (die Personalnummer) und hat eine Breite von 0 (damit sie unsichtbar ist)
Die zweite Spalte (Anzahl Spalten = 2) nutzt du dann für den Mitarbeiternamen, der dann angezeigt und ausgewählt werden kann, mit einer Breite von 3-5 cm.

Generell solltest du reservierte Begriffe wie NAME oder DATUM nicht als Feldbezeichnungen verwenden!!
Feldnamen mit Leerstellen können auch Probleme bereiten, also einen Unterstrich verwenden, das macht vieles einfacher.

Viel Spaß beim Basteln.

Grüße aus Rostock
Wolfgang
(Netwolf)

Tipp: Access ohne VBA ist wie Autofahren ohne Räder face-smile
Member: sollicitator
sollicitator Jan 17, 2012 at 16:23:02 (UTC)
Goto Top
Danke für den Hinweis, ich werde mich gleich mal dran setzen und es ausprobieren.

Ich hatte die ganzen Abfragen ursprünglich komplett im Excel aufgebaut und auch eine entsprechende Tabelle zustande gekriegt, die mir die benötigten Werte ausgab (Unter Verwendung von SUMMENPRODUKT und WENN Funktionen). Allerdings lastete die so geschriebene Tabelle meinen hochwertigen Rechner schon mit 100% aus, so dass eine andere Lösung gefunden werden muss. Woraufhin mir ein Freund riet "mach es doch mit Access" - was mich vor oben geschildertes Problem stellte, da ich dieses Programm zum letzten mal vor... 10 Jahren oder mehr verwendet hab (Dies nur kurz zur Vorgeschichte)

Kurz noch zu deinen Rückfragen:
- Die Bezeichnung der Maschinen erfolgt leider mittels Text.
Da ich allerdings in der eingebundenen Exceltabelle auch die Spalten "Kalenderwoche fortlaufend" bis "Stückzahl Kopie" entsprechen errechnenlassen habe, könnte ich auch als Zwischenschritt die Maschinenbezeichnung in einen Zahlenwert umwandeln lassen - und dann eben später eine Aufschlüsslung MaschinenID (Zahl) in Bereich (Text) vornehmen lassen. -> Wenn dies eine Bedingung ist, damit es anschließend funktioniert face-wink
Member: NetWolf
NetWolf Jan 17, 2012 at 17:22:16 (UTC)
Goto Top
nein, das ist keine Bedingung, sondern sauberes Programmieren. Daten sollen eindeutig zu identifizieren sein. Dafür nutzt man i.d.R. ein Zahl.

Btw ist mir aufgefallen, dass du ja nur einen Wert berechnen lässt. Warum dann eine Sortierung, die sowieso keinen Zweck hätte?
Member: sollicitator
sollicitator Jan 18, 2012 at 11:27:31 (UTC)
Goto Top
Da ich mit den Daten arbeiten muss, die ich zur Verfügung stehen habe, kann ich leider nicht so sauber programmieren, wie ich es gerne wollen würde (mal abgesehen davon, dass ich kein Programmierer im eigentlichen Sinne bin face-wink )
Deinen Nachsatz kann ich so nicht ganz zuordnen. Ich will doch diverse Werte in unterschiedlichen Abhängigkeiten ausgeben lassen?!
- Eine schnell Ansicht für einzelne Mitarbeiter/Maschinen mittels Formular
- eine Jahresübersicht, die die Wochenwerte aller Mitarbeiter in einer Tabelle ausgibt (hier dann wohl mittels Bericht - aber das ist dann erst der nächste Schritt. Immer einen nach dem anderen in neuen Gebieten habe ich mir als Credo zugelegt face-wink )
Member: RockNRolla69
RockNRolla69 Jan 20, 2012 at 21:10:50 (UTC)
Goto Top
hey,

imo würde ich die Tabellen nicht so stehen lassen.

tbl Kalenderwoche löschen und mit tbl Maschinen und Mitarbeiter 1:n beziehungen mit referenzieller Integrität bilden.

ArbeitsplatzNr im Schichtbuch = Primärschlüssel mit dublikate
PersonalNr im Schichtbuch = Primärschlüssel mit dublikate

netter link zu dem Thema

http://support.microsoft.com/kb/510037/de

mfg
Member: NetWolf
NetWolf Jan 21, 2012 at 15:03:04 (UTC)
Goto Top
Stimmt, wer lesen kann .... ich hatte nur dein Feld "Stückzahl" auf deinem Formular gesehen und war so von falschen Voraussetzungen ausgegangen.

Also noch mal von vorne:
- lösche die Tabellen KW und Kalenderwoche (weil überflüssig)
- erstelle eine Abfrage (Datenbasis = Schichtbuch)
- Die Kriterien für das jeweilige Feld werden in der Zeile [Kriterien] eingetragen (bedenke: nebeneinander = AND // untereinander = OR Verknüpfung)

Die Werte für die Kriterien holst du aus dem Formular. Beispiel:
Spalte: Bereich
Kriterium: = Formulare.Formularname.Bereich

Grüße aus Rostock
Wolfgang
(Netwolf)