2016-10-31 1 views
0

Ich bin neu in MS Access. Derzeit muss ich eine Seriennummer erstellen, ein Auto-Nummer-Paar mit einer Sub-Autonummer. Etwas wie M1-1, M1-2, M1-3, ... M2-1, M2-2, M2-3, ... M3-1, M3-2, ... Die Nummer muss eindeutig sein. Ich habe eine Tabelle für Main laufende Nummer für M1, M2, M3, ... erstellt einen Index erstellen, um es einzigartig zu machen. Dann eine weitere Tabelle für Sub-Nummer, 1,2,3,4, ... danach ein MainNum-Fremdschlüssel (Beziehung) und ein weiterer Index, um es eindeutig zu machen. Aber das Problem ist zweite Tabelle Ich kann nicht herausfinden, wie es eine automatische Nummer/laufende Nummer machen, weil es sich wiederholen kann.MS Access - Wie generiere ich autonumber mit Sub-Autonummer

Derzeit aus der Idee, brauche Hilfe.

Antwort

0

Ich würde empfehlen, die Seriennummer nicht als Primär/Fremdschlüssel in Tabellen zu verwenden. Verwenden Sie dazu numerische Felder: Automatische Nummerierung für primäre und Nummer für ausländische. Es funktioniert schneller und automatisch.

Für die Erzeugung der Seriennummer create public function, die abhängig von Argumenten den nächsten Wert oder optional den aktuellen zurückgibt. Aktuelle Werte des ersten und zweiten Teils der Seriennummer speichern in der Tabelle, sperren sie beim Generieren der neuen Nummer, sie garantieren die nächste eindeutige Nummer sogar in der Mehrbenutzerumgebung. Sie können auch alle generierten Nummern in einer Tabelle mit einem zusammengesetzten eindeutigen Index für beide Nummern speichern.

+0

Also erste Tabelle Ich habe eine primäre Autonummer und eine Nummer für ausländische. dann 2. tabelle wie erzeuge ich serialnummer mit pubilc funktion? wenn Sie "sperren" sagen, wie genau sperren Sie die Nummer? – KokJoo89

0

Machen Sie Ihre PK eine automatische Nummer und verwenden Sie diese für alle Beziehungen. Verwenden Sie für Ihre Seriennummer zwei lange ganzzahlige Felder (SN1, SN2). Rufen Sie im Ereignis before_update Ihres Formulars für neue Datensätze eine öffentliche Funktion auf, um neue 'Seriennummern' zu generieren.

Private Sub Form_BeforeUpdate(Cancel As Integer) 
Dim lngSN1 AS Long 
Dim lngSN2 as Long 
If Me.NewRecord Then 
'if SN1 is not to be incremented, set it here to whatever you want 
If GetSerials(SN1, SN2) Then 
Me!SN1 = lngSN1 
Me!SN2 = lngSN2 
Else 
Cancel = True 
End If 
End If 
End Sub 

Public Function GetSerials(ByRef SN1 as Long, ByRef SN2 as Long) AS Boolean 
If SN1 = 0 Then 
SN1 = Nz(DMax("SN1","<yourTable>"), 0) + 1 
SN2 = 1 
Else 
SN2 = DMax("SN2", "<yourtable>","SN1=" & SN1) + 1 
End IF 
GetSerials = True 
End Function 

Erstellen Sie eine Abfrage mit einem berechneten Feld Ihre Verbund ‚Serial‘ zu erstellen.

SELECT *, "M" & SN1 & "-" & SN2 as SerialNumber FROM <yourtable> 

Verwenden Sie diese Abfrage, wo immer Sie die Seriennummer anzeigen möchten.