Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Auswahlmenü in Formularen erstellen & speichern mehrerer Datensätze

Begonnen von AsicX, Oktober 12, 2021, 15:03:50

⏪ vorheriges - nächstes ⏩

AsicX

Hallo zusammen,

Ich melde mich bezüglich folgenden Sachverhaltes:


Ziel unserer Access-Anwendung ist es:
Übergabeprotokoll und Rückgabeprotokoll für Technik zu erstellen


Was haben wir bereits:
- Möglichkeit zur Hinterlegung von MA-Daten (zB.: Vorname, Name, Kürzel,etc.)
- Möglichkeit, um Hardware (z.B.: Gerätetyp, Modellbezeichnung und Seriennummer) in die DB zu bekommen (aus verschiedene verknüpften Tabelle)

Problem: Wie bekommen wir hin, dass wir die Daten nun sinnvoll bei Ausgabe in einer Tabelle zusammentragen? Sprich die beiden Bereiche in eine Synergie bringen?

Der Plan ist, in einer Tabelle die ID aus der Mitarbeitertabelle und die ID aus der Hardwaretabelle mit Ausgabedatum/Buchungsdatum abzulegen und anschließend das Protokoll zu erstellen.

Bei der Auswahl der auszugebenden Technik möchten wir aber nicht jedes Gerät einzeln wählen, sondern alle Geräte auf einmal. Hier hatten wir an folgende Umsetzung (grafisch -> siehe Anhang) gedacht, aber noch keinen Ansatz wie das technisch umsetzbar ist.

-> Nach dem Öffnen eines Formulars in dem man den MA sucht/ausgewählt hat, und dann alle verfügbaren Geräte angezeigt bekommt (Die Geräte sind in unserer DB einem fiktiven Lager-MA zugeordnet)


Hat jemand eine Idee?
Mit freundlichen Grüßen :)
  •  

DF6GL

Hallo,

das Ganze soll also ein "Lagerhaltung"  (oder "Ausleih/Rückgabe"-Funktionalität) werden?



ZitatBei der Auswahl der auszugebenden Technik möchten wir aber nicht jedes Gerät einzeln wählen, sondern alle Geräte auf einmal.


Wie ist das gemeint? Was ist dabei "Technik"?  Eine Geräte-Zusammenstellung? Woran erkennt man eine gewisse Zusammenstellung?

Zeige den Screenshot des Beziehungsfensters.



PS:  Crossposting ist unerwünscht!


https://www.ms-office-forum.net/forum/showthread.php?t=377271

AsicX

Hallo,

danke für die schnelle Rückmeldung.

Genau. Es soll eine Datenbank entstehen zur Hardwareverwaltung/Lagerverwaltung.


ZitatWie ist das gemeint? Was ist dabei "Technik"?  Eine Geräte-Zusammenstellung? Woran erkennt man eine gewisse Zusammenstellung?


Gemeint ist damit:
Die auszugebende Technik ist in dem Falle variabel von der Stückzahl der Geräte. Sprich es gibt Mitarbeiter, die bekommen beim Eintritt 1x Notebook, 2x Monitor & 1x Headset.
Das ist aber kein Standardfall, denn es gibt zum Beispiel auch Neueintritte, da soll der Mitarbeiter 1x Notebook, 3x Monitore und kein Headset bekommen.
Es soll aber auch der Fall bestehen einem bereits aktiven Mitarbeiter ein neues Notebook auszugeben, wenn sein altes Gerät kaputt gegangen ist. Oder er auf einmal doch einfach ein Headset zu einem späteren Zeitpunkt möchte.

Der Screenshot mit den bereits bestehenden Beziehungen der Tabellen befindet sich im Anhang.



Zu Ihrem "PS:..." Warum sollte das unerwünscht sein ? Ich versuche doch nur so viele Lösungsansätze wie möglich zu sammeln :(
  •  

MzKlMu

Hallo,
ZitatWarum sollte das unerwünscht sein ?
Das ist in jedem Forum unerwünscht, steht auch in den Forenregeln. Außerdem nutzt es eh nix, weil in den bekannten Access Foren fast die gleichen Leute antworten.

http://www.excel-ist-sexy.de/crossposting/
Gruß
Klaus
  •  

DF6GL

Hallo,

zunächst nur zum Tabellenaufbau:

-- Vermeide Sonder- und Leerzeichen, desgleichen reservierte Wörter.

-- Feld "Anzahl" in tbl_Hardware (die wäre mit "tbl_Geraete" besser benannt) ist falsch (unlogisch) und ein reserviertes Wort. Eine "Hardware" (Gerät) mit einer Seriennummer gibt es nur einmal.

-- tbl_Geraetetyp liegt an falscher Stelle und sollte zwischen tbl_Hersteller und tbl_Modell zu liegen kommen.

-- Benenne die "ID"-Felder (und andere) sinngemäß und eindeutig:  GeraeteID, ModellID, MAID,  Modell --> ModellName, GeräteTyp --> GeraeteTypBezeichnung,  etc.)

-- Benenne Fremdschlüsselfelder passend zu den PK-Feldern , z. B.: "MAID_F".

-- Erstelle Beziehungen mit referenzieller Integrität.
 
--  Weiteres Feld "BewegungsartID_F" (Long) einfügen. Dazu weitere Tabelle "tbl_Bewegungsarten", in der die Art einer Bewegung hinterlegt wird, z. B. Ausgabe, Rückgabe, Zugang (bei Kauf/Bestellung)  , Verschrottung (bei Ausmusterung) , etc.).

tbl_HardwareTransfer könnte besser als "tbl_GeraeteBewegungen" oder auch nur als "tbl_Bewegungen" benannt werden

Welchen inhaltlichen Sinn hat "ID_Ersteller"?

AsicX

Hallo,

zunächst erstmal: danke für die vielen Hinweise! :)

Mit ID_Ersteller ist der jeweilige IT-Mitarbeiter gemeint, der die Übergabe "bucht/erstellt". Wird bereits über die Windows-Anmeldung ausgelesen. Das funktioniert bereits!


Dennoch brauchen wir keine Grundsatzdiskussionen mehr führen, wie ich am Besten die Feldnamen deklariere.
Klar ist es hilfreich, aber die Datensätze und deren Datenstrukturen funktionieren bereits.

Uns fehlt es einfach an der technischen Umsetzung.
-> Wie können wir mehrere integrierte Datensätze in einem Formular auswählen (nach Belieben) -> diese Auswahl bündeln und anschließend in ein neues Formular "übernehmen" (zum Erstellen des Übergabeprotokolls)


Den Hinweis mit den "Bewegungen" finde ich an sich zwar nicht schlecht, dennoch soll bei einer einfachen "Hardwareübergabe" die jeweilige Technik vom MA: "Lager" auf den gewünschten MA: "XYZ" verweisen. Sprich es soll sich ID des Mitarbeiters der ID des jeweiligen Gerätes anpassen/angleichen.


LG
  •  

DF6GL

Hallo,
Zitatkeine Grundsatzdiskussionen mehr führen...


die Datensätze und deren Datenstrukturen funktionieren bereits...

Ok, wenn Du meinst...



ohne Grundsatzdiskussion:

ZitatWie können wir mehrere integrierte Datensätze in einem Formular auswählen (nach Belieben) -> diese Auswahl bündeln und anschließend in ein neues Formular "übernehmen" (zum Erstellen des Übergabeprotokolls)


das ist ein Irrweg.

markusxy

Zitat von: AsicX am Oktober 13, 2021, 08:57:10diese Auswahl bündeln

Was soll man darunter genau verstehen -> Zeig bitte ein konkretes Beispiel, wie das in der Datenbank aussehen soll.

Außerdem - hast du schon mal eine Datenbank gemacht - oder ist das dein erster Versuch?

Hast du dich mit den Grundlagen der Daten Normalisierung beschäftigt?

  •  

Beaker s.a.

@AsicX
Lösung kurz skizziert.
- dein gezeigtes Formular basiert auf der MA-Tabelle
- die linke Liste zeigt alle Geräte (gebundene Spalte = GeräteID)
- die rechte Liste basiert auf der Zwischentabelle, gefiltert auf
die MAID
- beide Listen mit "erweiterter Mehrfachauswahl"
- der obere Button schreibt mit der Auflistung "ItemsSelected" der
linken Liste eine kommagetrennte Aufzählung (String) der Geräte-IDs,
mit diesem String wird die IN-Klausel einer Anfügeabfrage bestückt,
die die IDs der ausgewählten Geräten (zusammen mit der MAID und evtl.
mit den anderen Daten) in die Zwischentabelle schreibt.
- der untere Button stösst eine Löschabfrage auf die Zwischentabelle
an
- beide Listen müssen nach dem Ausführen der entsprechenden Abfrage
aktualisiert werden Me.NameDerListe.Requery
gruss ekkehard


P.S. Man kann das auch noch ausbauen indem man in der linken Liste
die bereits zugewiesenen Geräte nicht mehr anzeigt um doppelte Ein-
träge zu vermeiden.
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
  •  

AsicX

Hallo @markus888 & @Beaker s.a.,

@markus888
Zitat von: markus888 am Oktober 13, 2021, 18:37:38Was soll man darunter genau verstehen -> Zeig bitte ein konkretes Beispiel, wie das in der Datenbank aussehen soll.


Ich werde mal in den folgenden Zeilen beschreiben (Bilder siehe Anhang), wie der "normale" IT-Mitarbeiter aus unserem Unternehmen die Datenbank bedienen soll.

ZitatAußerdem - hast du schon mal eine Datenbank gemacht - oder ist das dein erster Versuch?
Hast du dich mit den Grundlagen der Daten Normalisierung beschäftigt?

Das ist tatsächlich meine erste "größere" Datenbank. Ansonsten hatten wir dies in der Schule immer mal nebenbei mit behandelt. (PS: bin IT-Azubi)

@Beaker s.a.
ZitatLösung kurz skizziert.
- dein gezeigtes Formular basiert auf der MA-Tabelle
- die linke Liste zeigt alle Geräte (gebundene Spalte = GeräteID)
- die rechte Liste basiert auf der Zwischentabelle, gefiltert auf
die MAID

... fast richtig.
Wie in meiner Beziehungsansicht (Eintrag 3) zu erkennen, besteht die DB aus hauptsächlich 2 Bereichen.

Ganz Links (TBL_Mitarbeiter): wird der einzelne Mitarbeiter zunächst angelegt.

Nun von rechts nach links:
1. Beginnend mit TBL_Geraetetyp
-> dort werden Geraetetypen definiert (ID1= Notebook / ID2=PC / ID3= Monitor / ID=4 Headset / etc..)
2. Diese erzeugte GeraeteID wird in die TBL_Hersteller übergeben und einem jeweiligen Hersteller zugeordnet
-> ID1 = Lenovo (hat in dieser Tabelle bspw. auch die ID1)
3. Diese erzeugte IDHersteller ist nun auch verlinkt mit der TBL_Modell, in welcher die einzelnen Notebookmodelle des Herstellers "Lenovo" definiert sind (L480/T490s/T14....)
4. Nun geht diese klar definierte IDModell (mit Hersteller & Geräteinfo) an die TBL_Hardware, in welcher noch final der jeweilige Geraetename, Seriennummer,Anschaffungsdatum etc. eingetragen/hinterlegt wird ("Anzahl" ist erstmal nebensächlich..ignorieren)
5. Die wichtigste Tabelle (Synergie aus beiden Bereichen ("MA & Hardware")
.. Die TBL_Hardwaretransfer:
-> dort wird eine seperate ID (vom Hardwaretransfer) erzeugt, in welcher die einzelne ID_Mitarbeiter mit der jeweiligen zugeordneten ID_Hardware verknüpft ist. + das jeweilige Datum der "Buchung"/"Übergabe"
(den "Hardware-Standort" sowie "ID_Ersteller" könnt ihr erstmal ignorieren)

Nun beschreibe ich euch mal bildlich, wie man meine Datenbank bedienen soll (vom Startmenü bis hin zur Übergabe)
Bild 1: "Hauptmenü": -> zunächst klickt man auf "Mitarbeiter hinzufügen" um den einzelnen MA erstmal anzulegen im System)
Bild 2: "Mitarbeiter hinzufügen": Wenn man nun alle Kenndaten eingefügt hat, bestätigt man einfach mit dem Button "Speichern und Schließen"
Bild 3: ebenfalls "Mitarbeiter hinzufügen", da jede eingetroffene Technik zunächst erstmal einem "Lager-MA" zugeordnet werden soll, um eine Buchung von A nach B durchzuführen. Bzw.: wenn ein MA aus dem Unternehmen austritt, soll die zurückgegebene Technik im jeweiligen Lager wieder abgelegt werden. (deshalb habe ich hier Symbolisch mal ein Lager-MA namens "Lager2" angelegt.
Bild 4: "Hardware hinzufügen": (ausgehend vom Hauptmenü >> Button: "Hardware hinzufügen")
-> Dort pflegt man via Auswahllisten und Textfelder zunächst erstmal nur die "frisch" eingetroffene" Hardware von zB.: dem Lieferanten in die Datenbank ein.
-> Des Weiteren soll in diesem Schritt ebenfalls zu Zuweisung des einzelnen Gerätes auf den Lager-Mitarbeiter (L2) geschehen. (Diese Zuordnung funktioniert bereits in der TBL_Hardwaretransfer)
Bild 5: "Übergabe initiieren - 1. Schritt: MA auswählen)
-> sind nun MA & Hardware angelegt, soll man im Hauptmenü auf "Übergabe initiieren" klicken.
-> Dabei öffnet sich ein Formular, in welchem man den MA auswählt, der Technik zugewiesen bekommen soll.
Mit Doppelklick auf den MA gelangt man ins nächste Formular
Bild 6: "Übergabe initiieren - 2. Schritt: Technikzuweisung)
----> (Design noch nicht final...nur eine Überlegung) Aber auch mein größtes Problem! Bzw. Mein Anliegen/Frage an euch)
-> Der ausgewählte MA wird bereits ins neue Formular übergeben. Und soll nun Technik zugewiesen bekommen.
Dabei war mein erster Ansatz wie im 1. Forum Beitrag zu sehen.

Zitat- beide Listen mit "erweiterter Mehrfachauswahl"
- der obere Button schreibt mit der Auflistung "ItemsSelected" der
linken Liste eine kommagetrennte Aufzählung (String) der Geräte-IDs,
mit diesem String wird die IN-Klausel einer Anfügeabfrage bestückt,
die die IDs der ausgewählten Geräten (zusammen mit der MAID und evtl.
mit den anderen Daten) in die Zwischentabelle schreibt.
- der untere Button stösst eine Löschabfrage auf die Zwischentabelle
an
- beide Listen müssen nach dem Ausführen der entsprechenden Abfrage
aktualisiert werden
...genau! Man soll in dem Sinne eigentlich zunächst das Lager auswählen. Wo man dann sehen kann, was denn gerade so vorrätig ist an Technik.
Danach soll eine Mehrfachauswahl geschehen bzw. eine beliebige, weil ja nicht jeder neue MA gleich viel Technik bekommt / will.

ZitatP.S. Man kann das auch noch ausbauen indem man in der linken Liste
die bereits zugewiesenen Geräte nicht mehr anzeigt um doppelte Ein-
träge zu vermeiden.
Genau das ist der Plan, denn es soll ja keine Technik gebucht werden, die schon lange nicht mehr dem Lager-Mitarbeiter zugeordnet ist. (Ist ja dann schon ausgegeben an einen anderen "realen" Mitarbeiter)



So ich hoffe euch hat die Textflut nicht erschlagen ;)
PS: ich musste einiges "Schwärzen" in den Bilder, da keine Unternehmens-Infos freigegeben werden dürfen


Ich danke euch für eure Ansätze

LG
  •  

AsicX

Hier noch ein Screenshot, wie ich es jetzt gestaltet habe, wenn man es so macht wie aus der Skizze (Eintrag 1)  ;)
  •  

DF6GL

Hallo,

ich sag es nochmal:  das ist ein Irrweg..

Statt dieser Listenfeld-Schieberei ist dies vorzuschlagen:


Formular mit Basis zu tbl_Mitarbeiter,
darin eingebaut ein UFO_Steuerelement, das ein Endlosform mit Basis zu tbl_HardwareTransfer anzeigt und über die Schlüsselfelder "ID2 und "ID_Mitarbeiter" verknüpft ist.



Die Auswahl der Hardware geschieht über Kombifelder mit Basis zu tbl_Hardware.
Einschränkungen bzgl. Doppelvergabe wird über Abfragen für das Kombi  erledigt.

Fertig.


 Bild 6 (Gerät1- 9)  geht nicht mit dem Tabellenaufbau konform. 





Beaker s.a.

@franz
Normalerweise halte ich diese "Listenfeld-Schieberei" für eine gängige
Praxis (verwendet Access ja selber). Und wenn man das beherrscht,
ist das auch für den Anwender einfach bequemer als x-mal ein Kombi
aufzuklappen und einen Eintrag auszuwählen.
Dadurch, das der TS hier aber noch eine Vorauswahl vorsieht, hebt
sich der Vorteil des "auf einen Rutsch" natürlich vollständig auf.
Da kann ich deinem Vorschlag mit dem UFo nur zustimmen. Müssen
ja eh die gleichen Kombis drauf wie in seinem Form.

@AsicX
Leider kannst du die Grundsatzdiskussion nicht in allen Teilen
unberücksichtigt lassen. Eine DB ohne Beziehung (mit RI) funzt
nicht nachhaltig. Mit den Objektnamen musst du dich selber rum-
schlagen.
Aus deinen weiteren Erläuterungen ergibt sich zunächst mal die
Tatsache, dass du eine Tabelle "Lager" brauchst.*) Mit nur einem
Lager könnte man deinen Dummy-MA gerade noch so akzeptieren, bei
mehreren ist die Tabelle essentiell.
Zitat... fast richtig.
Nö, nach dem am Anfang gezeigten Bild und DM genau richtig.

Die Punkte 1.-4. sind für das Problem irrelevant. Das stimmt soweit
ja auch bis auf die fehlenden Beziehungen.
Pkt. 5 ist genau was ich beschrieben habe.

Zu Bild 7; - das funzt im unteren Teil (Listen & Buttons) auch wie be-
schrieben. Allerdings muss ich Franz hier zustimmen, - mit den diversen
Vorauswahlen entfällt die Bequemlichkeit. Wenn du dich auf die Auswahl
des Lagers beschränken könntest, könnte es wieder sinnvoll sein.

gruss ekkehard

*) Frage an die Regulars.
Ich bin mir nicht sicher in welcher Tabelle das
Lager dann mitgeführt wird, - in "Hardware" oder "MA-Hardware". Meine
Idee wäre letztere. Wobei dann immer einer der beiden FK (MA-ID_F bzw.
LagerID_F) leer bliebe. Bei "Hardware" müsste man den FK bei der Rück-
nahme aktualisieren.
Mögt ihr mir beispringen?
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
  •  

DF6GL

Hallo,



"Lager":

ich sehe im Beziehungsbild-Screenshot kein "Lager", obwohl im Formular sich auf ein solches bezogen wird.


Wobei sich hier wieder gleich die Frage erstellt, was für ein "Lager" das sein soll.  M. E. reicht tbl_Hardware (bei diesem Tabellenaufbau) völlig aus, um die Gesamtheit der "Technik"   (Geräte, Hardware) zu erfassen. JEDES Gerät hat einen Datensatz und damit Anzahl =1  (wobei dieses Feld dann gleich entfallen kann/muss)-  Durch die Seriennummer und ID_Modell wird jedes Gerät zum Individuum.  Allein die Existenz eines Hardware-Datensatzes sagt aus, dass solch ein Teil überhaupt vorhanden ist.  Natürlich kann man den "Lagerort"  in tbl_Hardware mitführen, aber der ist nur als reine Info (wo man das Gerät herholen muss) von Bedeutung. Wohin das Gerät ausgegeben wurde (Hardware-Standort), ist auch nur dazu da, um nicht ins falsche Gebäude zu rennen.

Das alles nur in Bezug auf die bisherige Kenntnis der Hintergrundsituation.

Aktuelle (An)Zahlen zu ausgeliehen (zugewiesenen) oder rückgegeben Geräten können allein durch Abfragen an tblHardwareTransfer ermittelt werden.



"Listenfeld-Schieberei", naja, je nach Sichtweise und Vorstellung einer Ablaufsteuerung. Und wirklich auch nur dann, wenn man weiß was man tut oder tun muss.

Optimaler  m. M. nach sind anstatt der Listenfelder Endlosforms, die eine Bearbeitung der Daten zulassen, z. B. Markierungen setzen und dedizierte Ereignisse bieten.



Trotzden sing im betroffenen Formulare die Auflistungsfelder (Gerät1-9) nicht als normalisierte Tabelle vorhanden und somit nicht oder nur sehr schwierig/aufwändig zu behandeln.  Das wäre mindestens zu überarbeiten.


Aber das alles ist Grundsatz-Diskutiererei, die nicht gewünscht ist..  :-X


Noch ein letzter Hinweis (auch Grundsatz):

Bevor man sich Gedanken um Formulare, Berichte (auch Abfragen) und Ablaufsteuerungen macht, ist (!) das Tabellenmodell zu prüfen und zu korrigieren, bis es der realen und zu behandelnden Datensituation entspricht.   

Und das macht man nicht nur einmal....

AsicX

Hallo,

nachdem ich nun sehr lange Zeit herum probiert habe, wie ich mein Problem am besten lösen könnte, bin ich nun zu folgendem Entschluss gekommen (siehe Anhang)

Nachdem man nun einen Mitarbeiter im vorherigen Formular ausgewählt hat, welcher gleich Technik (1 oder mehrere Geräte) zugewiesen bekommt. Wird dieser in die oberen Felder eingetragen ("Ausgewählter Mitarbeiter")

Anschließend soll sich Standardmäßig beim Formularaufruf 1 bestimmtes von 3 Lagern in der Combobox öffnen (angezeigt werden) -> da dies unser Hauptlager ist.

Nochmal zur Erinnerung beim ersten Anlegen einzelnen Geräte wird vor dem Speichern die Hardware einem von 3 "Lager-Mitarbeitern" zugeordnet (in TBL_Hardaretransfer). und in der Spalte "Markiert" kein Kreuz bzw. ein Nein eingetragen

Somit wird auch mein eingebautes Unterformular schlüssig:
Dabei werden in der oberen Liste die "noch verfügbaren" Geräte im bspw "Lager-M" angezeigt.
-> Soll nun ein verfügbares Gerät übergeben werden an den oben ausgewählten Mitarbeiter (hier: Max Mustermann), so kann man mittels Doppelklick auf das jeweilige Gerät (inkl. Beschreibungen) den Datensatz in die untere Liste verschieben. Quasi wird der Wert von der Spalte "Markiert" Aus der TBL_Hardware in ein "JA" umgewandelt, bzw. ein Kreuz gesetzt.

Gleiches geht auch anders herum. Falls man ein verfügbares gerät aus Versehen falsch gedoppelklickt hat, kann man den Datensatz einfach wieder mit einem erneuten Doppelklick in der unteren Liste nach oben befördern. Der Wert der Spalte "markiert ändert sich wieder.

>>Bitte nicht irritieren lassen, dass auf meinem Screenshot in der oberen Tabelle das so komisch verschoben ist. Die Formatierung passen wir noch an :)



Jetzt habe ich allerdings noch ein paar Fragen und hoffe auf eure Unterstützung.

1. Wie bereits beschrieben habe ich 3 verschiedene Lager (bzw. 3 Standorte) denen ja durch das erste Anlegen Technik zugewiesen wurde.
-> Mein Problem leider verändert sich bei der Auswahl der 3 Lager aus dem Kombinationsfeld nicht die dazugehörige Technik im Unterformular.
Ich habe auch schon das Netz durchforstet, bin aber noch auf keine richtige Lösung gestoßen.


LG
  •