Nummernvergabe

  • geschlossen
  • Access

  • Kam3L
  • 2152 Aufrufe 6 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Nummernvergabe

    Hallo zusammen,

    ich habe unter anderem die folgende Tabelle in einer Access 2007 Datenbank:

    Rechnungen:
    ID AutoIncrement
    Nummer
    Kunde
    Datum
    Betrag
    Anlage

    Die Daten werden per Formular eingetragen, natürlich mit ausgeblendetem ID Feld, damit diese aufsteigend und einmalig ist.

    Nun möchte ich das Feld "Nummer" wie folgt füllen:
    JahrVKID

    Beispiel für ID 1: 2010VK001
    Beispiel für ID 10: 2010VK010
    Beispiel für ID 100: 2010VK100

    Ich möchte also immer das Jahr, gefolgt vom String "VK" und der ID, abhängig von der Größe, mit führenden Nullen. Die letzte ID aus der Tabelle auszulesen ist per Abfrage kein Problem, nur scheitere ich nun an der weiteren Umsetzung.

    Wähle ich für "Nummer" im Formular ein Textfeld und setze die Abfrage als Standardwert, erscheint nur ?Name, wähle ich ein Kombinationsfeld, bekomme ich zwar die letzte ID+1, jedoch schaffe ich es nicht, dies mit dem von mir gewünschten zu verknüpfen.


    Ich hoffe, dass mein Problem damit ausreichend beschrieben ist und freue mich über sämtliche Antworten.

    Vielen Dank.
    Gruß
    Kam3L

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Kam3L () aus folgendem Grund: erledigt

  • Hallo,

    ich gehe mal davon aus das du mal nicht mehr als 999 Kunden haben
    wirst, in den Zeiten der Wirtschaftskrise ;)

    Also probiere es mal hiermit.

    Ereignisprozedur Beim Hingehen -> Feld Kunde

    Private Sub Kunde_Enter()
    Select Case ID
    Case Is < 10
    Me.Nummer = Format(Date, "yyyy") & "VK00" & Me.ID
    Case Is < 100
    Me.Nummer = Format(Date, "yyyy") & "VK0" & Me.ID
    End Select
    End Sub

    bei mehr als 999 Kunden folgendes

    Private Sub Kunde_Enter()
    Select Case ID
    Case Is < 10
    Me.Nummer = Format(Date, "yyyy") & "VK000" & Me.ID
    Case Is < 100
    Me.Nummer = Format(Date, "yyyy") & "VK00" & Me.ID
    Case Is < 1000
    Me.Nummer = Format(Date, "yyyy") & "VK0" & Me.ID
    Case Is < 10000
    Me.Nummer = Format(Date, "yyyy") & "VK" & Me.ID
    End Select
    End Sub

    Ich hoffe geholfen zu haben.

    DIMU
    [SIZE="2"]über 90% aller Fehler befinden sich ca. 50cm vor dem Monitor...[/SIZE]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dimu ()

  • Danke für deine Antwort Dimu!

    Ich möchte nicht das Feld Kunde, sondern das Feld Nummer füllen.
    Die ID soll dabei auch die Rechnungs-ID sein.

    Ich habe versucht, deine Prozedur abzuändern.
    Allerdings wird wohl ID nicht erkannt, da immer 2010VK00 im Feld Nummer steht.

    Hier mein Code:
    Private Sub Nummer_Enter()
    Select Case ID
    Case Is < 10
    Me.Nummer = Format(Date, "yyyy") & "VK00" & Me.ID
    Case Is < 100
    Me.Nummer = Format(Date, "yyyy") & "VK0" & Me.ID
    End Select
    End Sub


    Kannst du mir nochmals unter die Arme greifen?


    Edit: Was mit gerade einfällt: Ich habe ja schon eine fertige Abfrage, die mir die nächste ID liefert.
    Kann ich die Abfrage von VBA abrufen und den Wert für die Variable ID setzen und das ganze dann damit prüfen?
    Gruß
    Kam3L

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Kam3L ()

  • Mit meiner Prozedur hättest Du auch das Feld Nummer gefüllt, ist aber hier
    erst mal Wurscht. Das mit der ID funktioniert nur dann wenn Dein Feld
    im Formular auch ID heißt, da die Prozedur ja über Me. darauf zugreift.

    Ob es mit deiner Abfrage funkt weiß ich nicht, müßte diese mal sehen.
    Vielleicht fällt mir ja dann was ein.

    DIMU

    PS.: Arbeite normal in ACCESS 2003, also etwas Geduld
    [SIZE="2"]über 90% aller Fehler befinden sich ca. 50cm vor dem Monitor...[/SIZE]
  • Das Feld ID im Formular ist vorhanden, da steht eben "(Neu)" drinn.

    Meine Abfrage hat den folgenden Code:
    SELECT TOP 1 ([Rechungen].ID+1)
    FROM [Rechungen]
    ORDER BY [Rechungen].ID DESC;

    Hast du eine Idee, wie ich das Ergebnis dieser Abfrage als ID im Nummernfeld verwenden kann?
    Bzw. wie ich es doch schaffen könnte, auf das vorhandene ID Feld zuzugreifen.

    Danke für deine Hilfe!!
    Gruß
    Kam3L
  • Ich habs geschafft :)
    Dein Ansatz hat mich in die richtige Richtung gebracht (auf VBA bin ich gar nicht gekommen)

    Hier mein Code:
    Private Sub Nummer_Enter()
    If Me.DataEntry = True Then
    ID_neu = DMax("ID", "Rechungen: Verkauf") + 1
    Select Case ID_neu
    Case Is < 10
    Me.Nummer = Format(Date, "yyyy") & "VK00" & ID_neu
    Case Is < 100
    Me.Nummer = Format(Date, "yyyy") & "VK0" & ID_neu
    End Select
    End If
    End Sub

    Nochmals vielen Dank für deine Hilfe!
    Gruß
    Kam3L
  • Deine Abfrage gibt den letzten höchsten ID-Wert+1 aus aber dieser steht ja
    nach dem speichern des Datensatzes schon im Datensatz.
    Warum dann diese Abfrage?
    Außerdem hast du dann immer noch das Prob mit den führenden Nullen.
    Dieses "NEU" bedeutet das der Datensatz noch nicht gespeichert wurde.
    Sobald du aber irgendwas einträgst, müßte sich das ändern.
    Ist dein Formular ein Endlosformular, heißt stehen alle Datensätze drin oder nur wo ein Datensatz eingegeben wird?


    DIMU

    Ist die Datenbank streng geheim? Ansonsten kannst du mir sie mal schicken.
    [SIZE="2"]über 90% aller Fehler befinden sich ca. 50cm vor dem Monitor...[/SIZE]