AfterUpdate, Access 2003 (SQL-Server 2005 via ODBC)

03/06/2012 - 23:35 von Wilfried Baumann | Report spam
Liebe Access Experten,

Vorgeschichte:

Access 2003 via ODBC nach SQL-Server 2005 mit folgendem Connect String:
ODBC;DRIVER={SQL Server};SERVER=<<server name>>;DATABASE=<<database name>>;Trusted_Connection=Yes;

Datenblattformular eingebettet in ein anderes Formular, beim editieren kommt der Fehler:

"Die Daten wurden geàndert. Ein anderer Benutzer hat diesen Datensatz bearbeitet und die von ihm vorgenommenen Änderungen gespeichert, bevor Sie versucht haben, Ihre Änderungen zu speichern. Bearbeiten Sie den Datensatz erneut."

Jemand machte mich auf
http://support.microsoft.com/kb/302492
aufmerksam, wo das Problem gut beschrieben ist und ein Lösungsweg.

Der Lösungsweg klappt zwar nicht ganz, aber folgender Code vermeidet die Fehlermeldung:

"
Public Sub SetTo(lngID As Long)
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
rst.FindFirst "ID = " & lngID
If rst.NoMatch Then
'MsgBox "No entry found.", vbInformation
Else
Me.Bookmark = rst.Bookmark
End If
Set rst = Nothing
End Sub

Private Sub Bemerkung_AfterUpdate()
Dim lngID As Long
lngID = Me.ID
Me.Requery
Call SetTo(lngID)
Me.Bemerkung.SetFocus
End Sub
"

Allerdings eröffnet sich folgendes Problem: AfterUpdate liefert mir die ID des verlassenen Datensatzes, und nicht des neuen, zum Beispiel angeklickten Datensatzes. Das heisst das Positionieren des Cursors nach "Requery" funktioniert nicht ganz korrekt.

Für jegliche Hinweise bin ich sehr dankbar.

W, Baumann
 

Lesen sie die antworten

#1 Winfried Sonntag
04/06/2012 - 18:36 | Warnen spam
Am 03.06.2012 schrieb Wilfried Baumann:


Vorgeschichte:

Access 2003 via ODBC nach SQL-Server 2005 mit folgendem Connect String:
ODBC;DRIVER={SQL Server};SERVER=<<server name>>;DATABASE=<<database name>>;Trusted_Connection=Yes;

Datenblattformular eingebettet in ein anderes Formular, beim editieren kommt der Fehler:

"Die Daten wurden geàndert. Ein anderer Benutzer hat diesen Datensatz bearbeitet und die von ihm vorgenommenen Änderungen gespeichert, bevor Sie versucht haben, Ihre Änderungen zu speichern. Bearbeiten Sie den Datensatz erneut."



Für solche Fàlle solltest Du auf jeden Fall ein Feld des Typs
TIMESTAMP im SQL Server in jeder Tabelle haben. Anschließend die
Tabellen im Frontend wieder neu verknüpfen.

Jemand machte mich auf
http://support.microsoft.com/kb/302492
aufmerksam, wo das Problem gut beschrieben ist und ein Lösungsweg.

Der Lösungsweg klappt zwar nicht ganz, aber folgender Code vermeidet die Fehlermeldung:

"
Public Sub SetTo(lngID As Long)
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
rst.FindFirst "ID = " & lngID
If rst.NoMatch Then
'MsgBox "No entry found.", vbInformation
Else
Me.Bookmark = rst.Bookmark
End If
Set rst = Nothing
End Sub

Private Sub Bemerkung_AfterUpdate()
Dim lngID As Long
lngID = Me.ID
Me.Requery
Call SetTo(lngID)
Me.Bemerkung.SetFocus
End Sub
"

Allerdings eröffnet sich folgendes Problem: AfterUpdate liefert mir
die ID des verlassenen Datensatzes, und nicht des neuen, zum
Beispiel angeklickten Datensatzes. Das heisst das Positionieren des
Cursors nach "Requery" funktioniert nicht ganz korrekt.



Passiert das in einem UFO? Vor dem Requery hast Du den richtigen
Datensatz in der Auswahl?

Servus
Winfried
Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
Community Forums NNTP Bridge: http://communitybridge.codeplex.com/
Access-FAQ: http://www.donkarl.com/AccessFAQ.htm
Access-Stammtisch: http://www.access-muenchen.de

Ähnliche fragen