Aufgabenstellung:
Das Autowert-Feld einer Tabelle soll wieder auf 1 oder den nächsthöheren freien Wert zurückgesetzt werden, nachdem Datensätze eingegeben und wieder gelöscht wurden.
Das Autowert-Feld einer Tabelle soll wieder auf 1 oder den nächsthöheren freien Wert zurückgesetzt werden, nachdem Datensätze eingegeben und wieder gelöscht wurden.
Dafür gibt es 3 Lösungen die jede für sich Vor- und Nachteile hat.
Lösung 1:
Komprimierung der Datenbank-Datei. Dies sollte die Autowerte aller Tabellen auf den nächsthöheren freien Wert zurück setzen.
Komprimierung der Datenbank-Datei. Dies sollte die Autowerte aller Tabellen auf den nächsthöheren freien Wert zurück setzen.
Nachteil: Ab Version Access 2000 funktioniert das oft nicht mehr.
Lösung 2:
Erstellen Sie eine Abfrage und kopieren Sie den folgenden SQL-Statment in die sql-Ansicht rein und ersetzen Sie die Platzhalter Tabellenname und AutowertFeldname mit den entsprechenden:
ALTER TABLE [Tabellenname] ALTER COLUMN [AutowertFeldname] COUNTER(1,1)
Nachteil: Die Aktionsabfrage schlägt fehl, wenn bestehenden Beziehungen auf das Feld AutowertFeldname vorhanden sind. Somit muss zunächst diese Beziehungen entfernt werden und anschließend können diese wieder gesetzt werden.ALTER TABLE [Tabellenname] ALTER COLUMN [AutowertFeldname] COUNTER(1,1)
Lösung 3:
Public Function SetSeed(strTbl As String, Optional lngID As Long) As Boolean
'Purpose: Reset / Set the Seed of the AutoNumber-Field from a table
'Condition: Reference on Microsoft ADO Ext. 2.8 for DLL (msADOX.dll)
Dim cat As New ADOX.Catalog, col As ADOX.Column
Set cat.ActiveConnection = CurrentProject.Connection
Set col = GetTheAutoNumberColumn(cat.Tables(strTbl))
If col Is Nothing Then
MsgBox "In der Tabelle '" & strTbl & "' wurde kein Autowert-Feld gefunden!", vbCritical
Else
If lngID = 0 Then lngID = Nz(DMax(col.Name, strTbl), 0) + 1
If Not col.Properties("Seed") = lngID Then col.Properties("Seed") = lngID
SetSeed = True
End If
Set cat = Nothing
Set col = Nothing
End Function
Public Function GetTheAutoNumberColumn(tbl As ADOX.Table) As Object
'Purpose: Find the AutoNumber-Field from a table and if found then return the Column-Object
Dim col As Object
For Each col In tbl.Columns
If col.Properties("Autoincrement") Then
Set GetTheAutoNumberColumn = col
Exit For
End If
Next
End Function
Nachteil: Keiner, außer das dieser VBA-Code hinterlegt werden muss und ein Verweis auf die ADO bestehen muss.
Zu diesem Thema gibt es noch den folgenden interessanten Link!
Keine Kommentare:
Kommentar veröffentlichen