Autowert in Access eingrenzen

Hallo liebe Mitglieder!:smile:

Ich hoffe ich finde hier einen Accessprofi:wink:

Für ein Schulprojekt soll ich eine Datenbank für eine Videothek erstellen. soweit so gut.

leider bleibe ich an einem Punkt hängen:

„Die Videonummer von 1000 bis 9999 soll automatisch vergeben werden.“

Leider ist es nicht möglich den Autowert mit einer Gültigkeitsregel oder ähn. einzugrenzen.

Hat noch jemand eine andere Idee, wie ich das hinbekomme?

Dankeee!!!

Hallo Guten-Morgen-Sonnenschein,

Es stimmt, dass Autowert nicht eingegrenzt werden kann. Es ist auch nicht ratsam Autowert für Spalten zu verwenden, die als ein Schlüßel verwendet werden, wie aus meiener Sicht die Videonummer ist.

Was kannst du machen:

  1. Du definierst die Spalte Videonummer als Felddatentyp Zahl mit Fekdgröße Long Intereg.

  2. In den Feldeigenschaften findest du „Gültigkeitsregel“. Dort solls Du eingeben: >=1000 Und

Huiii, ich danke euch beiden erstmal für die schnelle Antwort!!!:smile:

Die Lösung von Mariya scheint etwas leichter zu sein.

An welcher Stelle muss ich die Funktion erstellen? Hast du zufällig im Kopf, wie die ungefähr aussehen müsste?

Danke dir!!!:smile:

Ich werd mich gleich mal ransetzen und weiter probieren:smile:

Hallo,

ich wußte gar nicht, dass ich hier noch angemeldet bin. Programmiere schon länger nicht mehr. Trotzdem eine kurze Antwort:
Verwende ein eigenes Feld, nicht den Autowert und zähle diesen Inhalt einfach hoch (geht über ein einfaches Makro). Bei diesem Feld kannst Du dann den Startwert selbst setzen und die zulässigen Werte vorgeben. Hatte ich selbst so in eienm Programm umgesetzt.
Ist nun zwar nicht die perfekte Hilfe, aber Beispiele kann ich Dir nicht geben, da ich Access derzeit wegen Rechnerwechsel noch nicht installiert habe. Vielleicht kommst Du damit aber doch weiter.

Viel Spaß

Sorry, ich war nicht am Platz und habe Deine Meldung erst jetzt gesehen. Also zu der Funktion, falls Du sie schon nicht geschrtieben hast: Du sollst ein Modul erstellen und die Funktion in disem Modul schreiben. In der Funktion sollst Du mit einer Abfrage Max(Versionnumer) auslesen und in eine Long - Variable speichern. Dann um 1 erhöhen und den Wert zurückgeben:

Die Funktion wird etwa so aussehen:

Function GetAutonumber(TableName As String, FieldName As String) As Long
Dim MaxNr As Long
Dim strSql As String
Dim rs As Recordset
Dim conn As Connection

strSql = „SELECT Max(“ & FieldName & ") As MaxValue FROM " & TableName

’ Hier muss ein Recordset erstellt werden, mit dem strSql ausgeführt wird
'rs = …

MaxNr = rs.Fields(„MaxValue“).Value
rs.Close
MaxNr = MaxNr * 1
GetAutonumber = MaxNr

End Function

Ich habe schon jahrelang nicht mit Access programmiert und bin nicht sicher, wie die Syntax für erstellen und öffnen eines Recordsets ist. Vermute sogar, dass im Access eine eingebaute Funktion geben sollte, die den Max-Wert zurückgibt.

Falls Du nicht weiter kommst, melde dich, ich werde dann probieren mich zu erinnern wie es genau war.

Gruß
Mariya

Hallo Sonnenschein,

der folgende Tip stammt nicht von mir. Ich habe ihn aus einer KnowHow-Datenbank.

Verabschiede dich zunächst mal von dem Feld-Typen „Autowert“. Er birgt auch Fehler, die Du nachher nur aufwändig beseitigen kannst. Lege ein Feld vom Typ long an. Dann den folgenden VBA-Code insFormular:

Public Function DatensatzIDZähler(NamenDesFeldesImFormular As String, DeinFeldnameInDerTabelle As String, NamenDerTabelleDesFeldes As String, Optional Praefix As String, Optional Beginn As Long = 1)

'ich habe mich auch von dem „Autowert“ verabschiedet, da ich es auch für störend
'empfand, dass eine fortlaufende Nr nicht immer gewährleistet ist, deswegen setze
'ich folgende Funktion nach Aktualisierung eines Feldes ein

’ Sascha Münch GSX 550 EU rrr#550
[email protected]

'Änderungen: [email protected]
’ Ein fixer


'Dim intCurID As Integer
Dim intNewID
Dim frm As Form
Dim ctl As Control

On Error GoTo DatensatzIDZähler_Err
Set frm = Screen.ActiveForm
Set ctl = frm(NamenDesFeldesImFormular)
If IsNull(ctl) Then
’ prüft ob der der maximale Wert eines Feldes ermittelt werden kann. Bei
'neuen/leeren Tabellen ist ja kein Wert vorhanden…
If (IsNull(DMax("[" & DeinFeldnameInDerTabelle & „]“, NamenDerTabelleDesFeldes))) Then
'… dann ist der Anfangswert =1
intNewID = Beginn ’ hier kann auch ein beliebiger Wert stehen, wie z.B. 5000

Else
’ wenn bereits Daten vorhanden sind, wird der maximale Wert ermittelt und um 1 erhöht
intNewID = DMax("[" & DeinFeldnameInDerTabelle & „]“, NamenDerTabelleDesFeldes)

'ggf. numerischen Teil rausextrahieren (um die Länge von Präfix kürzen)
If Len(Trim(Nz(Praefix))) > 0 Then
intNewID = Right(intNewID, (Len(intNewID) - Len(Trim(Nz(Praefix)))))
End If

intNewID = intNewID + 1

End If
’ hier wird der neue Wert (IDZähler) dem Feld zugwiesen
If Len(Trim(Nz(Praefix))) > 0 Then
ctl = Praefix & intNewID
Else
ctl = intNewID
End If
End If
Exit Function

DatensatzIDZähler_Err:

MsgBox "Fkt DatensatzIDZähler - Fehler: " & Err.Number & " " & Err.Description, vbCritical, „Fehler“

End Function

Ich habe vergessen: die Funktion wirst du natürlich irgendwo verwenden müssen. Es kommt darauf an wie das Speichern eines neuen Records in Deiner Anwendung gemacht wird, ob Du mit einem gebundenen Control arbeitest, oder in ungebundenen Textbox die Daten eingetragen werden und dann durch Bestätigung mit einem Buttondruck gespeichert werden. Wenn Du diesbezüglich Hilfe brauchst, beschreibe Deine konkrete Situation, damit ich Dir einen entsprechende Lösung vorschlagen kann.

Hallo,

„Die Videonummer von 1000 bis 9999 soll automatisch vergeben
werden.“

Also willst du ein Feld mit Autowert, aber ab 1000 aufwärts? Kennst du dich mit VBA ein bisschen aus? Dann mach 2 Felder, ein Autowert Name z.B. DsNr, und ein Zahlenfeld VideoNr. Im Form-Ereignis „Before Update“ schreibst du:
VideoNr = DsNr + 1000

Gruß
Hardy

Hallo mein Sonnenschein,
tut mir leid für die Dauer, bin selten im Netz und vergesslich.
Ich sehe 2 Möglichkeiten:
A) Autowert umgehen und auf Formularebene eigene Zählung programmieren. Sehr flexibel aber kompliziert bei Mehrbenutzerumgebung.
B) Du benutzt eine Gültigkeitsgregel oder programmierst die Regelung in die Oberfläche. Nach Eintrag der Nr. 999 erstellst du per Abfrage die Videos 1000 bis 9999 und löschst sie sofort wieder. Access zählt jetzt bei 10000 weiter. Die Videos 1000 bis 9999 kannst du (jedenfalls bis AC '00) per SQL einfügen. Falls das nicht klappt, kannst du sie mit den echten Daten überschreiben.
Viel Spaß
Thomas