August 06, 2020, 20:13:21

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Datenbank Layout/Funktionen

Begonnen von thg0208, Juli 09, 2020, 08:21:53

⏪ vorheriges - nächstes ⏩

thg0208

Juli 09, 2020, 08:21:53 Letzte Bearbeitung: Juli 09, 2020, 09:57:48 von thg0208
Hallo,

aktuell erstelle ich meine erste Datenbank, diese soll zur Erfassung von Zuständen von Presswerkzeugen zu unterschiedlichen Zeitpunkten dienen.
Vorab wollte ich noch erwähnen, dass ich keinerlei Grundlagen mit Access Programmierung hatte, habe mir die Informationen in erster Linie in diesem Forum oder auf diversen Videos einer bekannten Videoplattform geholt.

Grundsätzlich ist das ganze so aufgebaut, dass die Befüllung der Datenbank über Formulare funktionieren soll.

Start ist eine Grunddatenbank mit einigen Metaangaben, Primärschlüssel stellt hier die Bauteilnummer dar.

Über die Auswahl des Bereichs (z.B. Seite, Tür, Dach) habe ich eine automatische Weiterleitung zum betreffenden Formular eingerichtet.

Hier ist mein aktuelles Problem.

Zu jedem Bauteil gibt es mehrere Stufen mit unterschiedlichen Werkzeugnummern/Stufen, in der Regel 4-6 Stück.(hier Primärschlüssel). Das heißt zu einem Bauteil kommen mehrere eindeutig zugewiesene Werkzeugnummern.

Aktuell muss man die Bauteilnummer bei jeder neuen Stufe neu eingeben, das würde ich gern abkürzen, um das ganze weniger fehleranfällig zu machen und zu vereinfachen.

Aktuell gibt man das in etwa so ein:

Formularseite 1:
-Bauteilnummer
-Werkzeugnummer (Primärschlüssel)
-Stufe (aus Auswahlliste)

Formularseite 2:
- div. Oberflächenbereiche (zwischen 20-40 Bereiche)

Hier sind dann 2 Buttons, beide speichern die Eingaben.

Button 1 führt auf Formularseite 1 und legt einen neuen Datensatz an. (Prozedere beginnt von neuem)
Button 2 schließt das Formular und öffnet das Startformular mit den Metadaten.


Mein Gedankengang war die Eingabe des Bauteils zu speichern und in Button 1 so einzufügen, dass die Eingabe bestehen bleibt. Das bekomme ich aktuell nicht zum laufen. Ist das generell sinnvoll das so zu machen ?+

Habe auch mal den Code des Formulars angefügt:


Vielen Dank für jegliche Anregungen und Vorschläge.


Private Sub Anlegen_Datensatz_Dach_Click()
DoCmd.RunCommand acCmdRecordsGoToNew
    DoCmd.GoToControl "Grunddaten_Dach"
End Sub

Function checkForm() As Boolean
' Nach leeren Feldern suchen.
    If IsNull(Me![Bauteilnummer]) Then
      ' Fehlermeldung.
      MsgBox "Bauteilnummer fehlt."
      ' Kein Speichern.
      checkForm = False
      Exit Function
    End If

    If IsNull(Me![BEMI-Nummer_Dach]) Then
      MsgBox "BEMI-Nummer fehlt."
      checkForm = False
      Exit Function
    End If
   
    If IsNull(Me![OP_Dach]) Then  
      MsgBox "OP fehlt."
      checkForm = False
      Exit Function
    End If
    checkForm = True
End Function

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Not checkForm Then
      Cancel = True
    End If
End Sub

Private Sub Bearbeiten_Erstanfertigung_Dach_Click()
If checkForm() Then
MsgBox "Eingaben in Ordung"
DoCmd.GoToControl "Erstanfertigung_Dach"
End If
End Sub
Private Sub Befehl_Speichern_EA_Dach_beenden_Click()
MsgBox "Eingabe gespeichert"
DoCmd.Save acForm, "Dach"
DoCmd.Close acForm, "Dach"
DoCmd.OpenForm acForm, "Gesamtübersicht"
End Sub

'Button 1 quasi, hier würde ich gerne die Eingabe der Bauteilnummer verhackstücken'

Private Sub Befehl_Speichern_EA_Dach_neue_Eingabe_Click()
DoCmd.Save acForm, "Dach"
DoCmd.GoToControl "Start_Dach"
End Sub

DF6GL

Hallo,

Zitat von: undefinedZu jedem Bauteil gibt es mehrere Stufen mit unterschiedlichen Werkzeugnummern/Stufen, in der Regel 4-6 Stück.(hier Primärschlüssel). Das heißt zu einem Bauteil kommen mehrere eindeutig zugewiesene Werkzeugnummern.

Aktuell muss man die Bauteilnummer bei jeder neuen Stufe neu eingeben, das würde ich gern abkürzen, um das ganze weniger fehleranfällig zu machen und zu vereinfachen.



wenn ich es recht verstehe, gibt es einen "Bearbeitungsplan" (Zuordnung bestimmter Werkzeuge zu bestimmten Bauteilen) der als Vorlage (Template) für  spätere Aktionen dienen soll.


Vergiss zunächst ", dass die Befüllung der Datenbank über Formulare funktionieren soll."  Über Formulare werden Tabellendaten bearbeitet. Datenmanipulationen, die hier bei der Verwendung der Vorlagen auftreten, erfolgen über SQL (Abfragen).

Erstelle also:

tblBauteile

BTID  (Autowert, PK)
BT_Nummer (Text, eindeutiger Index)
.
.


tblWerkzeuge

WKZID (Autowert)
WKZ_Bezeichnung (Text)
.
.
.

tblBauteilWkzVorlage

BTWkzVID (Autowert, PK)
BTWkzV_BTID (Long, FK)
BTWkzV_WKZID (Long, FK)
.
.
.
.


tblBauteilWerkzeuge  (Verlaufstabelle)

BTWkzID  (Autowert, PK)
BTWkz_BTID (Long, FK)
BTWkz_WKZID (Long, FK)
.
.
.
Erstelle die Beziehungen dazu.


Die Vorlage-Dateneingabe wird während der Planungsphase erledigt.


Beim Erstellen (mittels Button) einer neuen Zustandsprüfung für ein bestimmtes Bauteil werden zu diesem Zeitpunkt per SQL die Daten aus der entspr. DS in der Vorlage-Tabelle in die Verlaufstabelle übernommen(angefügt), mit Anpassung an aktuelle Daten, z. B. ein Datum.

Für jede Tabelle werden Formulare erstellt.

tblBauteile:  frmBauteile  Einzelform  und  frmBauteileVorlage  Einzelform
tblWerkzeuge: frmWerkzeuge  Einzelform
tblBauteilWkzVorlage: frmBauteilWkzVorlage  Endlosform    Einbau als UFO in frmBauteileVorlage
tblBauteilWerkzeuge:  frmBauteilWerkzeuge  Endlosform    Einbau als UFO in frmBauteile

In frmBauteile  wird beim Anlegen eines neuen DS das Bauteil mittels Kombi ausgewählt. Dabei können die Daten aus dem entspr. Vorlage-Datensatz in die tblBauteilWerkzeuge mit Hilfe einer Anfügeabfrage kopiert (übernommen, angefügt) werden.

NeuerMann1978

Hallo,
zeige mal ein Bild des Beziehungsfensters damit man eine Vorstellung von der Tabellenstruktur hat.
Was willst Du mit nachfolgendem Code erreichen ?
DoCmd.Save acForm, "Dach"Hier werden keine Daten gespeichert, sondern der ggf. geänderte Entwurf eines Formulars. Mit Datenspeicherung hat das nichts zu tun.
Access speichert bei gebundenen Formularen automatisch, ohne weitere Rückfrage.
Ein extra Speichernbutton ist nicht erforderlich, kann man aber machen. Aber das ist dann ein ganz anderer Befehl.

Bei korrektem Aufbau der Tabellenstruktur, wirst Du zunächst mal so gut wie keinen VBA Code benötigen.
Zeige also erst mal ein Bild des Beziehungsfensters. Beziehungen sind ja hoffentlich angelegt.

PS:
Bitte lösche im Code die vielen Leerzeilen und verwende die Codetags des Forums.

thg0208

Hallo, vielen Dank für die schnellen Antworten. Habe die Beziehungen mal angehängt. Die Bauteilgruppen sind dann z.B Dach und SWR (da alle anderen Bauteilgruppen quasi selben Aufbau haben werden die eingepflegt wenn die grundsätzliche Funktion steht

@DF6GL , Danke für die Vorschläge, ich muss das nochmal genau in Ruhe lesen und schauen wie ich das umsetzen kann. Bezüglich der Funktion bzw. Nutzen der Datenbank: Es soll für eine jedes Werkzeug ein Zustand zum Zeit der Anfertigung beschrieben werden. Dieser soll dann noch zu zwei späteren Zeitpunkten überprüft und ggf. geändert werden. Ansonsten dient die Datenbank lediglich einer Feststellung der Istzustände.

@NeuerMann1978:

Vielen Dank, vor allem das mit DoCmd.Save acForm, "Dach" ist eine interessante Info. Also wenn ich im Formular was reinschreibe ist es immer tbl drin und gespeichert ? Gut zu wissen.

Code vom Forum muss ich mir noch anschauen wie das geht, mach ich dann gerne.


Ich lese mir das nochmal genau durch und schau dass ich auf eine Lösung komme.


NeuerMann1978

Hallo,
der Aufbau ist falsch.
Alle Bauteile müssen als Datensätze in eine Tabelle. Nicht als Feldnamen.
In die Tabelle mit den Bauteilen kommt dann noch in Feld zur Unterscheidung ob Dach oder SWR.
Dann brauchst Du eine Tabelle um die Bauteile der Gesamtübersicht zuzuordnen.
Das nennt sich dann n:m Beziehung.
Gibt es noch mehr Tabellen ähnlich SWR und Dach ?

Du machst Exceltabellen und keine Datenbank.
Du solltest Dich mit den Grundlagen beschäftigen.
Theorie:
https://www.hdm-stuttgart.de/~riekert/lehre/db-kelz/
Praxis:
https://www.access-tutorial.de/

thg0208

Ich stimme dir zu, nach dem, was ich so gelesen habe ist der Aufbau grundsätzlich erstmal falsch. Den Aufbau habe ich so gewählt, da ich sonst in einer Tabelle knapp über 800 Felder hab, von denen dann 95% leer bleiben. Für die Erstellung der Formulare war mir das einfach zu umständlich, da bei Feldzuweisungen immer ca. 900 Möglichkeiten waren, das war mir zu unübersichtlich.
Ja, es wird dann noch weitere Tabellen wie SWR und Dach geben, z.B. Türen, Frontklappe usw.

Hab mal ein Bild angefügt, wie das Befüllen im Formular aktuell ausschaut.

Danke weiterhin, das hilft mir wirklich sehr weiter alles, gute Denkanstöße.

NeuerMann1978

Hallo,
bei korrektem Aufbau wirst Du in der Bauteiltabelle 3 Felder haben (PS, Bezeichnung, Gruppe als FS).
In der Tabelle sind dann knapp 800 Datensätze.
In der Zuordnungstabelle sind es ein paar mehr. Was sollt den zu einem eingebauten Bauteil erfasst werden ?

PS:
Eine Accesstabelle kann ohnehin nur max. 255 Felder haben.

thg0208

Ich habe mal die zum Formular zugehörige Datenbank als Foto eingefügt.

Also jedem Bauteil sind z.B 4 Werkzeuge zugeordnet, und davon dann die bestimmten Oberflächenbereiche. Und wenn das dann für alle Bauteile in einem tbl sind werden das halt weit mehr wie die 255 Einträge.

Ich kann das gerne noch mehr aufdröseln.

DF6GL

Hallo,

lies und arbeite mal die u. st. Links 1, 1a und 1b durch und setze diese Regeln in Deiner DB um.

Sonst brauchst Du gar nicht weitermachen..



thg0208

Alles klar, ja habe schon gerechnet, dass da noch grundlegende Fehler drin sind. Ich nehme mal alles mit und melde mich dann wieder wenn ich das soweit angepasst habe.

Vielen Dank !