PDA

Vollständige Version anzeigen : Nummer +1 Anfängerproblem


Thomas Theiler
20.09.2001, 10:28
Hi zusammen

ich habe ein Problem mit meiner Tabelle. Jedem Datensatz soll eine fortlaufende Nummer zugewiesen werde. Sie soll also immer um ein höher sein, als die zu letzt verwendete. Wenn ich einen Autowert verwende habe ich immer dieses Problem: wenn ich bei der Eingabe eines neuen Datensatzes abbreche vergibt Access den Autowert trotzdem und er bleibt vergeben.

Es geht mir nicht darum, Lücken zu füllen, die beim Löschen älterer Einträge entstehen, sondern der neuste Datensatz muss einfach immer eine um eins höhere Nummer als der zuletzt Eingegebene haben...

Ich habe bereits die Suche verwendet, wurde aber aus den anderen Beiträgen nicht schlau..
und das komprimieren der Datenbank löst das Problem auch nicht.

Ich hoffe, ich habe mein Problem einigermassen verständlich dargelegt.

Vielen Dank für eure Hilfe

Thomas Theiler

Res1999
20.09.2001, 14:38
Hallo Thomas

Wie bearbeitest du denn deine Daten ?
Werden die Datensätze über ein Formular eingegeben oder schreibst du sie direkt in die Tabelle ?
Vieleicht kann ich dir ja helfen !

Christian

Xspire
20.09.2001, 14:45
Hallo Thomas!

Ich versteh dein Problem nicht, denn wenn du als Typ 'Autowert' verwendest stellst du auch sicher, dass der neueste DS immer die höchste Nummer hat.
Solltest du mit VBA unterwegs sein, kannst du auch schnell eine kleine Funktion schreiben, die dir jedesmal, wenn du in ein best. Feld springst, den Wert im gewünschten Feld um eines erhöht.
Achte aber auf die Schlüssel, dass du damit keine Probleme bekommst (sicher gehst du in dem Fall halt mit einem Autowert).

Hondo
20.09.2001, 14:57
Hallo,
hab erst vor wenigen Tagen dazu ne kleine Prozedur geschrieben.
Erstelle ein leeres Formular, unter "on Open" Ereignisprozedur eingeben und (rechts auf die 3 Punkte clicken)als unten stehenden Code eintragen
Gruß Andreas

Private Sub Form_Open(Cancel As Integer)
Dim db As Database
Dim rs As Recordset
Dim i As Integer
i = 0

'rs und db setzen
Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT * FROM deinerTabelle;", dbOpenDynaset)

If Not rs.Updatable Then Exit Sub
rs.MoveFirst
Do While Not rs.EOF
i = i + 1
rs.Edit
rs!deinZuNummerierendesFeld = i
rs.Update
rs.MoveNextLoop

' RS und DB schließen
rs.Close
db.Close

' Formular schließen
DoCmd.Close

End Sub

Thomas Theiler
20.09.2001, 15:24
Hi Zusammen

Ich hatte den Auftrag, Daten aus einer Datenbank aus Win 3.11 zeiten zu übernehmen und aufzuarbeiten. Das habe ich direkt in der Tabelle gemacht. Im Laufe der Arbeiten bin ich immer wieder einmal aus Versehen in eine neue Zeile gerutscht, habe dann mit ESC abgebrochen. Das hat zur Folge, dass jetzt Lücken von bis zu 80 Datensätzen entstanden ist.
Einmal vergeben, dürfen sich die Nummern nicht mehr ändern, da die Datenbank zu Karteikärtchen (aus Papier) kompatibel bleiben muss.

@Christian:

Mommentan gebe ich die Daten direkt in die Tabelle ein. Sie sollen aber, wenn ich fertig bin, per Formular eingegeben werden...


@RBBE-avogt:

Wie kann ich diese Porzedur dann in meinem Eingabe-Formular verwenden?
Sorry, wenn ich etwas schweer von Begriff bin, aber ich bin in Sachen Access ein Anfänger (bastle erst seit gut zweieinhalb Wochen damit rum)...

"deinerTabelle" muss ich mit dem Namen meiner Tabelle ersetzen und "deinZuNummerierendesFeld" mit dem Namen des Feldes... ?

holgii
20.09.2001, 18:10
Hallo Thomas,

für's erste reicht es dann vielleicht so (?):
- Die Spalte "LaufendeNummer" als "Zahl" und zwar "Long Integer" zu definieren
- Die Tabelle in Datenblatt-Ansicht öffnen, Spalte "LaufendeNummer" markieren, und "Aufsteigen sortieren
- Der höchste Wert wird am Tabellen-Ende angezeigt und beim Erfassen eines neuen Datensatzes vergibst Du die nächsthöhere Nummer eben manuell

ACHTUNG: VORHER EINE SICHERUNGSKOPIE DER DB ODER TABELLE ANLEGEN !!!

Zwecks Verwendung eines Formulars und/oder Standardwert durchsuche mal dieses Forum mit den Begriffen wie DMax oder DomMax. Auch die Online-Hilfe von Access gibt was her zu den genannten Funktionen.

Gruß
holgii

DIN A4
20.09.2001, 18:23
Hi Thomas,

ich habe das auch ständig, nur stört es mich meistens nicht. Versuche es doch mal so:
In der zugrundeliegenden Tabelle definierst Du eine Gültigkeitsregel (Dort wo Du den Felddatentyp festlegst) wie z.B. >0 oder <>"" oder so. Das sollte dafür sorgen, daß Access diese leeren Datensätze gar nicht erst speichert und so auch nicht mit einem Autowert versieht.

Versuchs mal.

DIN A4

elmar
20.09.2001, 21:09
Hallo Thomas,
ich habe eine kleine Vereinsverwaltung. Da kommen mal Mitglieder hinzu, es treten auch mal welche aus. Die nächste freie Mitgliedsnummer im Feld "M_NR" meiner Tabelle "Mitglieder_Verein" wird mir immer automatisch vorgegeben, wenn ich einen neuen Datensatz im Erfassungsformular anlege. In der Eigenschaft "Standartwert" meines Feldes im Formular habe ich eingetragen:
=DomMax("[M_NR]";"Mitglieder_Verein")+1
Damit habe ich die letzte MNR plus 1 als neue Mitgliedsnummer. Klappt prima.
Ist es das, was Du suchst?

Hondo
21.09.2001, 06:24
Hallo Thomas,
Diese Prozedur ist dafür da, um nachträglich eindeutige, von 1 beginnende und um 1 fortgesetzte nummern zu vergeben.
Zu dem Zweck wird das Formular manuell aufgerufen.
Gruß Andreas

fab
21.09.2001, 08:26
Hallo,
ich habe auch ein ähnliches Problem, eine Rechnungs-Nr., die zum Jahresanfang wieder mit 1 anfängt, z.B. 01 0001, und immer um +1 erhöht wird.

Die Lösung von elmar ist zwar ok, geht jedoch nicht bei mehreren Benutzern.

Hat vielleicht jemand eine Lösung für das Problem?

Danke!