2016-07-11 6 views
0

Ich habe eine 2 Tabellen, nennen sie PO und PO_LI. Es gibt eine PO-Spalte mit der Bezeichnung PO #, die ein Primärschlüssel ist und in einer 1: n-Beziehung zur PO # -Spalte in PO_LI steht (die 1 in PO). In PO_LI sind die anderen Spalten Line #, Description und LineAmount.Haben Sie den Wert für den Spaltenneustart von 1 nach dem Ändern des Primärschlüsselwerts autonummeriert?

Wie kann ich die Nummer für jede neue Bestellnummer auf 1 zurücksetzen?
Kann dies mit der automatischen Nummerierung gemacht werden?
Kann dies in der ms-Zugriff GUI getan werden oder ist VBA-Code erforderlich?

+0

http://stackoverflow.com/questions/20738596/how-to-reset-an-access-tables-autonumber-field-it-didnt-start-from-1 – marlan

Antwort

1

Sie können ein AutoWert-Feld nicht manuell bearbeiten oder dessen Anfangswert ändern. Am besten verwenden Sie VBA, um die maximale Zeilennummer zu erhalten und zu erhöhen. Wenn Sie eine neue Bestellung verwenden, beginnen Sie bei 1. Sie würden diese VBA in das AfterUpdate-Ereignis des Bestellfelds einfügen.

Man könnte so etwas tun:

Dim db as Database 
Dim rec as Recordset 
Dim rec2 as Recordset 
Dim MyVal as Integer 

Set db = CurrentDB 
Set rec = db.OpenRecordset("Select LineNum from MyTable where PO = '" & Me.txtPO & "' group by PO") 

'If there are no records returned, start at 1. Otherwise, increment. 
If rec.EOF = true then 
    MyVal = 1 
else 
    Set rec = db.OpenRecordset("Select Max(LineNum) from MyTable where PO = '" & Me.txtPO & "'") 
    MyVal = rec(0) + 1 
endif 

MyVal ist jetzt die Nummer, die Sie LineNum schreiben. Natürlich müssen Sie die Variablen und so ändern, was auf Ihren Formularen und in Ihren Tabellen tatsächlich ist, aber Sie sollten die Idee bekommen.

+0

Ich dachte auch in diese Richtung, aber wie überprüfe ich, ob der Dateneintrag eine andere Bestellung hat als die alten? Müsste ich eine SQL-Anweisung verwenden, um alle Werte aus der PO # -Spalte abzurufen und jeden dieser Werte mit dem neuen zu vergleichen? Es scheint, als wäre das nicht die effizienteste Lösung. Von jetzt an ist es egal, da es nicht zu viele Daten gibt, aber in Zukunft könnte es ein Problem werden – Michael

+0

Siehe meine aktualisierte Antwort. –

+0

Oder in einer Zeile: 'Nz (DMax (" LineNum "," MeineTabelle "," PO = '"& Me.txtPO &"' "), 0) + 1'. Mit Nz() besteht keine Notwendigkeit für das Wenn-dann-sonst, Max von nichts ist NULL. – Andre

Verwandte Themen