PDA

Vollständige Version anzeigen : Schreibkonflikt bei Prozedur


joghurtjens
21.01.2008, 10:21
Ich habe auf einem Formular ein Kontrollkästchen als Steuerelement eingebaut, in dessen Abhängigkeit weitere Steuerelemente stehen.

Klicke es nun an, bekomme ich jedes Mal einen Schreibkonflikt, obwohl ich momentan allein auf der DB arbeite.

Woran könnte das liegen?

Private Sub Post_Reaktion_Click()
'On Error GoTo Err_Post_Reaktion_Click

Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("tblPostdaten", dbOpenDynaset)

Me.Refresh

If Me!Post_Reaktion = True Then
rs.FindFirst "Post_Nr = " + Str(Me!Post_Nr)
rs.Edit
rs!Post_Reaktionsdatum = rs!Post_EinDat + 14


If MsgBox("Mit 'Ja' entscheiden Sie sich für die Standardbearbeitungszeit von 14 Tagen," _
& vbCr & _
"Über 'Nein' bestimmen Sie ein abweichendes Antwortdatum." _
, vbQuestion + vbYesNo, "Antwortdatum ändern...") = vbNo Then


Datart = 2 'Öffentliche Variable auf 2 setzen
DoCmd.OpenForm "frmKalender", acNormal


End If

rs!Rkt_ID = 1
rs!Status_ID = 1
rs.Update
rs.Close

Me.Post_AntwDat.Enabled = True
Me.Post_AntwDat.Locked = True
Me.btnDatBeantw.Enabled = True

Else
rs.FindFirst "Post_Nr = " + Str(Me!Post_Nr)
rs.Edit
rs!Post_Reaktionsdatum = Null
rs!Rkt_ID = 4
rs!Status_ID = 2
rs!Post_AntwDat = Null
rs.Update
rs.Close
Me.Post_AntwDat.Enabled = False
Me.Post_AntwDat.Locked = False
Me.Status_ID = 2
Me.btnDatAntw.Enabled = False
Me.btnDatBeantw.Enabled = False
Me.btnAnPA_Uebertragen.Enabled = False

Call Bearbeitung(Me!Post_Nr)

End If




Set rs = Nothing

'Fehlerbehandlung##############################
'Exit Sub
'Err_Post_Reaktion_Click:
'Fehlerbehandlung
'##############################################

End Sub

lalo
21.01.2008, 10:50
Hallo,

habe dieses Problem auch schon gehabt, ohne die Ursache genau herauszufinden.
Ein Versuch wäre nur den Datensatz zu lesen den Du tatsächlich benötigst, als im Recordset nicht die ganze Tabelle einlesen und dann suchen (find) sondern mit einem SQL-Statement
"Select * from tblPostdaten where Post_Nr = " & Str(Me!Post_Nr)
Du bekommst dann eben nur den einen Datensatz.

joghurtjens
21.01.2008, 11:00
Hab das eben nochmal ausprobiert, das wars leider nicht.

Josef P.
21.01.2008, 11:01
Bearbeitest du per Recordset den selben DS, der im Formular geöffnet ist und womöglich auf "Bearbeitung" steht bzw. kommt die Meldung nach einer Bearbeitung im Formular dieses DS?

joghurtjens
21.01.2008, 11:59
Ja, ich bearbeite per Recordset den selben DS, der im Formular geöffnet ist.

Josef P.
21.01.2008, 12:05
Dann wirst du vermutlich den Schreibkonflikt selbst auslösen, da der DS 2x im Editmodus geöffnet ist/wird.

du könntest vor dem 2. Update-Vorgang dafür sorgen, dass das 1. Update abgeschlossen ist.
Dort wo jetzt Me.Refresh steht könntest du Me.Dirty=false ergänzen.

BTW: warum verwendest du überhaupt ein neues Recordset zum Bearbeiten?

Sascha Trowitzsch
21.01.2008, 12:10
Eben!
Du kannst im Code das Recordset weglassen und im Prinzip alle rs!Irgendwas durch Me!Irgendwas austauschen.

Ciao, Sascha

joghurtjens
21.01.2008, 12:45
Eure Frage ist völlig berechtigt, macht keinen Sinn.
Nach Berichtigung funzt es. Vielen Dank für die hilfreichen Hinweise.