Ich habe eine Datenbank für Ersatzteilhaltung erstellt, d.h. es gibt eine Tabelle mit Teilen und es existiert bereits ein Formular.
In Tabelle und Formular gibt es ein Feld mit der vorhandenen Stückzahl des jeweiligen Teils. Um nun eine Änderung des Bestandes zu
erreichen,möchte ich nicht in dieses Feld klicken, um den neuen Bestand einzugeben, sondern 2 Schaltflächen erstellen, um eine Erhöhung,
bzw. eine Verringerung des Bestandes zu erreichen. Soll bedeuten, ich klicke auf die Schaltfläche "+", der Bestand in dem entsprechenden Feld
erhöht sich um 1. Analog dazu soll sich durch Klick auf eine Schaltfläche "-" der Bestand um 1 verringern. Gleichzeitig (bei "-")
soll sich ein Fenster öffnen, welches abfragt, für welche Maschine das Ersatzteil benötigt wird. Die Eingabe dort und die Bezeichnung des
Datensatzes für das Ersatzteil soll nach Abschluss der Eingabe in einem Bericht gespeichert werden.
Ich hoffe, ich habe mein Anliegen ausreichend beschrieben. Ich habe zu diesem Thema schon mehrere Bücher gewälzt und im Internet nach
Lösungsansätzen gesucht, bin aber leider nicht fündig geworden.
Ich hoffe nun, dass irgendjemand hier aus dem Forum weiterhelfen kann.
Hallo,
das Vorhaben ist in dieser Form grundsätzlich falsch. In einer DB erfasst man keine Bestände, Bestände werden errechnet. Du benötigst dazu eine extra Tabelle in der die Ersatzteilbewegungen erfasst werden. Diese Tabelle benötigt einen Bezug (Fremdschlüssel) zum Ersatzteil und einen Fremdschlüssel zur Maschine.
In der Tabelle erfasst man einen Anfangsbestand (ohne Fremdschlüssel zur Maschine).
Die Ersatzteile die ausgehen werden mit negativem Vorzeichen erfasst. Weitere Zugänge des Ersatzteils auch wieder mit positivem Vorzeichen und ohne Fremdschlüssel zur Maschine. Der Bestand ist somit die Summe der Zu und Abgänge gruppiert über das Ersatzteil und und damit auch automatisch stets aktuell.
Oha, das ist ein ganz anderer Denkansatz, klingt aber absolut plausibel. Besten Dank für den Hinweis.
Hallo Ulisa,
Falls Du die gewünschte Funktionalität mal für ein
anderes Feld implementieren möchtest, hilft Dir
vielleicht dies:
Public Function ZahlenFeldScrollen( _
ByVal edKeyCode As Integer, _
ByRef ctl As Control, _
Optional ByVal lMax As Currency = 0, _
Optional ByVal lMin As Currency = 0, _
Optional ByVal iOffset As Currency = 1) As Integer
'---------------------------------------------------------------------------------------
' Purpose : scrollt in Zahlfeldern mit den Pfeiltasten
' Parameter : edKeyCode = gedrückte Taste im Zahlfeld
' : ctl = Referenz auf das aufrufende Zahlfeld
' : lMax = höchster möglicher Wert
' : lMin = kleinster möglicher Wert
' : iOffset = Schrittweite -> Standard = 1
'---------------------------------------------------------------------------------------
Dim cur As Currency
'prüfen ob Pfeil-Rauf oder Pfeil-Runter gedrückt wurde
If edKeyCode <> vbKeyUp And edKeyCode <> vbKeyDown Then
'eine andere Taste wurde gedrückt
'gedrückte Taste zurückgeben und Function verlassen
ZahlenFeldScrollen = edKeyCode
Exit Function
End If
'prüfen, ob Zahlfeld leer ist
If Len(Format(ctl.Value) & "") = 0 Then
'Feld ist leer
'Standardwert = 0 eintragen
cur = 0
'Funktion beenden
ctl.Value = 0
ZahlenFeldScrollen = 0
Exit Function
End If
'aktuellen Wert zwischenspeichern
cur = ctl.Value
'welche Pfeil-Taste wurde gedrückt
If edKeyCode = vbKeyUp Then
'Pfeil rauf
cur = cur + iOffset
Else
'Pfeil runter
cur = cur - iOffset
End If
'Min und Max prüfen
If lMin <> 0 Then
If cur < lMin Then
cur = lMin
End If
End If
If lMax <> 0 Then
If cur > lMax Then
cur = lMax
End If
End If
ctl.Value = cur
ZahlenFeldScrollen = 0
End Function
Diese Funktion wird so nicht durch Schaltflächen
aufgerufen, sondern per Feld_KeyDown-Ereignis:
KeyCode = ZahlenFeldScrollen( _
edKeyCode:=KeyCode, _
ctl:=Me.Controls("DasZahlenfeld"), _
lMin:=1, _
lMax:=100, _
iOffset:=1)
Die Funktion lässt sich aber sehr einfach auf Button-
Reaktion umschreiben.
hth
gruss ekkehard