Stefan Falz: Access spinnt?!

Beitrag lesen

Hallo Martin,

erstmal noch ein paar Fragen zu deinem Posting.

  1. Werte in Datenbank (Access) schreiben, dabei eine Autonummer vergeben und diese sofort wieder auslesen.

Wird die ID fortlaufend vergeben (1, 2, 3, ...) oder per Zufall ermittelt ?

Denn es kommt erstens in unregelmäßigen Abständen vor, daß Access die entsprechende Stelle in der Tabelle nicht findet, obwohl diese eindeutig  existiert und zweitens, wenn ich einen Datensatz lösche, daß in eine "beliebige" Stelle geschrieben wird, aber nicht an die mit der zuletzt vergebenen Autonummer.
Ab und zu funktionier es auch.

MDAC hat in Version 2.1 und 2.5 Probleme bei einem Delete im Zusammenhang mit JET-Datenbanken (Access)
http://support.microsoft.com/support/kb/articles/Q230/1/31.ASP?LN=EN-US&SD=gn&FR=1

»»  Set ConnObj = Server.CreateObject ("ADODB.Connection")

Set rsUpdate = Server.CreateObject ("ADODB.Recordset")
      ConnObj.Open odbcsource
      rsUpdate.Open "Tabelle", ConnObj, adOpenKeySet, adCmdTable
   rsUpdate.AddNew
   WriteData
   rsUpdate.Update
   rsUpdate.MoveLast
   Autonummer = rsUpdate("Autonummer") 'hier wird autonummer vergeben

Probier mal das hier: (nur bei fortlaufender ID)

Set ConnObj = Server.CreateObject ("ADODB.Connection")
    Set rsUpdate = Server.CreateObject ("ADODB.Recordset")
       ConnObj.Open odbcsource
       Call GetMaxID()
    Set rsUpdate = Nothing
Set ConnObj = Nothing

Private Sub GetMaxID()

' Sollte wegen Application.Lock auf jeden Fall gesetzt werden,
' da ansonsten die Anwendung bei einem Fehler evtl. immer noch
' gesperrt ist
On Error Resume Next
    Application.Lock
    rsUpdate.Open "Tabelle", ConnObj, adOpenKeySet, adCmdTable
        rsUpdate.AddNew
        WriteData
        rsUpdate.Update
    rsUpdate.Close
    rsUpdate.open "SELECT max(Autonummer) As maxID FROM Tabelle", ConnObj, 3, 3
        Autonummer = rsUpdate("maxID")
    rsUpdate.Close
    Application.Unlock

End Sub

Wenn Du eine nicht fortlaufende ID hast, solltest Du dieser aber selbst ermitteln,
und Access die Arbeit ersparen. (Rnd bzw. Random in der IIS-Hilfe)
Dann hast Du die volle Kontrolle über deine ID's und kannst Sie besser verwenden.

Tschau, Stefan