crustacean
Goto Top

Hardware-Inventar mit Access

Ziel:
Kleine Datenbank für die Hardware-Inventarisierung, inkl. Namensgenerator

AlohA!
Ich möchte mir eine kleine Access-Datenbank stricken, in der ich meine Hardware inventarisiere.
Soweit so gut, da sie nur mit ein paar Datensätzen und wenigen Informationen starten soll.
Mein Problem ist, dass ich innerhalb der Datenbank gleichzeitig die Namen für die Geräte generieren möchte. Die Namensnorm ist schon festgelegt und auch schon in der Umsetzung. D.h. werden Geräte installiert, bekomme sie schon den Namen der Norm entsprechend.
Folgende Struktur ist bei uns gültig:

AA-BB-CC-DD-###
AA = Länderkürzel nach ISO
BB = Kürzel des Standortes
CC = Kürzel der Abteilung
DD = Kürzel des Geräte-Typs
### = dreistellige Zahl
Beispiel
DE-DD-SA-DT-001



Die Kürzel sind in Tabellen hinterlegt. Die Zahlen sollen hochgezählt werden. Jetzt möchte ich so etwas wie einen Namensgenerator erstellen. Über eine Maske wähle ich die Kürzel aus und Access soll mir die nächste freie Nummer anhängen. Nächste freie Nummer heißt in diesem Fall, wenn das Gerät mit dem Namen DE-DD-SA-DT-002 ersetzt wird und der nächste Desktop im Vertrieb des Standortes installiert wird, möchte ich die 002 bekommen und nicht die nächste freie Nummer nach dem Hochzählen. Access soll also nicht einfach hochzählen, sondern auch Lücken erkennen und diese erst auffüllen, bevor eine neue Kennung erstellt wird.

Ich hoffe ich habe mich klar genug ausgedrückt, damit ihr mir helfen könnt.

Danke für eure Hilfe!
Grüße,
Crustacean

Content-Key: 120012

Url: https://administrator.de/contentid/120012

Printed on: April 26, 2024 at 12:04 o'clock

Mitglied: 27234
27234 Jul 08, 2009 at 14:29:41 (UTC)
Goto Top
Hallo,

da wirst Du eine kleine Funktion schreiben müssen.
Du suchst dir z.B. mit "Dlookup" die Werte von "Min" und "Max" des Suffix ### und durchläufst eine Schleife, beginnend von Min + 1 bis Max.
In der Schleife dann jedesmal schauen ob der Wert schon vorhanden ist, wenn ja, nehmen und beenden, wenn nein, Wert + 1 und weitersuchen.

Gruß René
Member: Crustacean
Crustacean Jul 09, 2009 at 06:43:47 (UTC)
Goto Top
AlohA René!
Das übersteigt jetzt meinen Horizont. Was du mir sagen willst verstehe ich. Lediglich die Umsetzung übersteigt meine derzeitigen Fähigkeiten. Könntest du, oder jemand anderes das ganze einmal in Code umsetzen.

Danke!
Crustacean
Mitglied: 27234
27234 Jul 09, 2009 at 12:53:56 (UTC)
Goto Top
Hallo,

o.k. hier eine kleine Funktion zu dem Thema.
Folgende Annahmen:
1. Tabelle "INVENTAR" mit einer Spalte "Inventarnummer"
in diese Tabelle existieren Eintrage in der Form DE-DD-SA-DT-### wobei für ### 001 bis 999 steht
2. Lücken in ### suchen, dazu Funktion "f_freieNrsuchen" aufrufen mit Parameter Präfix z.B. f_freieNrsuchen("DE-DD-SA-DT-")
3. die Funktion liefert erste freie Suffix-Nummer
Achtung, die Funktion liefert die Nummer als Integer, muss also in Text formatiert werden

Public Function f_freieNrsuchen(strPräfix As String) As Integer
Dim varMin, varMax, varHelp
Dim strBedingung
Dim i As Integer

varMax = DMax("Right$(Inventarnummer,3)", "INVENTAR", "Inventarnummer like '" & strPräfix & "*'")  
If IsNull(varMax) Then
    f_freieNrsuchen = 1     ' kein Eintrag für diesen Präfix gefunden, also 1  
    Exit Function
End If
varMin = DMin("Right$(Inventarnummer,3)", "INVENTAR", "Inventarnummer like '" & strPräfix & "*'")  
If varMin > 1 Then
    f_freieNrsuchen = 1     ' die 1 ist nicht belegt, also kann 1 benutzt werden  
    Exit Function
End If
    
For i = CInt(varMin) To CInt(varMax)
    varHelp = DLookup("Right$(Inventarnummer,3)", "INVENTAR", "Inventarnummer = '" & strPräfix & Format$(i, "000") & "'")  
    If IsNull(varHelp) Then
        f_freieNrsuchen = i
        Exit Function
    End If
Next i
' keine Lücke gefunden, also varMax + 1  
f_freieNrsuchen = CInt(varMax) + 1
        
End Function

Gruß René
Member: Crustacean
Crustacean Jul 09, 2009 at 13:05:10 (UTC)
Goto Top
AlohA!
Oh, herrlich!
Danke!
Dann werde ich mich jetzt wieder verstärkt damit befassen!

Grüße
Crustacean