Neuigkeiten:

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

Mobiles Hauptmenü

Bitte um Hilfe bei einem Access-Problem

Begonnen von ulisa, April 17, 2012, 09:53:03

⏪ vorheriges - nächstes ⏩

ulisa

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.

MzKlMu

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.
Gruß Klaus

ulisa

Oha, das ist ein ganz anderer Denkansatz, klingt aber absolut plausibel. Besten Dank für den Hinweis.

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)