Fehler 3218 Aktualisierung nicht möglich; momentan gesperrt.

20/06/2008 - 12:25 von Lutz Uhlmann | Report spam
Access 2003 Projekt FE + BE

Bei mir kam der Fehler 3218 und machte mir einen Strich durch meinen
Programm-Ablauf
Der Fehler tritt bei einer größeren Datenbearbeitung im Code auf, welche ich
wegen des Umfangs in eine Transaktion gesteckt habe.
Für die Bearbeitung öffne ich das BE direkt. Ich arbeite allein auf der
Datenbank, kann also nicht an einem 2. Benutzer liegen.

In folgendem Code tritt ziemlich am Ende der ganzen Operation der Fehler
3218 auf.

sql = "SELECT * FROM t_Material WHERE MatMenge=0"
Set rsmat = db.OpenRecordset(sql, dbOpenDynaset)
Do Until rsmat.EOF
lMatID = Nz(rsmat!MatID, 0)
sql = "DELETE * FROM t_MaterialFrist WHERE MatID=" & lMatID
db.Execute sql, dbFailOnError
sql = "DELETE * FROM t_MaterialRes WHERE MatID=" & lMatID
db.Execute sql, dbFailOnError
sql = "DELETE * FROM t_MatDokumente WHERE ANL_ID=" & lMatID
db.Execute sql, dbFailOnError
sql = "DELETE * FROM t_MatNotiz WHERE ANL_ID=" & lMatID
db.Execute sql, dbFailOnError
sql = "DELETE * FROM t_MatTechnisch WHERE ANL_ID=" & lMatID
db.Execute sql, dbFailOnError

rsmat.MoveNext
Loop
rsmat.Close
Set rsmat = Nothing

DBEngine.Idle dbRefreshCache '(???)

sql = "DELETE * FROM t_Material WHERE MatMenge=0"
db.Execute sql, dbFailOnError '<- Fehler 3218

Bei diesem letzten Execute kommt der Fehler. Habe probiert ob ich mit
DBEngine.Idle dbRefreshCache vielleicht die vorherige Aktion auf dieser
Tabelle abschliessen kann. hat nicht geholfen.
Beheben kann ich das zwar, indem ich das Löschen des Datensatzes mit
"rsmat.delete" in die Schleife verlege, aber prinzipiell müßte doch auch die
obige Variante funktionieren? Bzw wie kann man die zum Funktionieren
bringen??? Der Fehler muß ja irgendeine Ursache haben ...

Lutz
 

Lesen sie die antworten

#1 Jürgen Schulz
20/06/2008 - 13:34 | Warnen spam
Hallo Lutz
Bei mir kam der Fehler 3218 und machte mir einen Strich durch meinen
Programm-Ablauf
Der Fehler tritt bei einer größeren Datenbearbeitung im Code auf, welche
ich wegen des Umfangs in eine Transaktion gesteckt habe.
Für die Bearbeitung öffne ich das BE direkt. Ich arbeite allein auf der
Datenbank, kann also nicht an einem 2. Benutzer liegen.

In folgendem Code tritt ziemlich am Ende der ganzen Operation der Fehler
3218 auf.

sql = "SELECT * FROM t_Material WHERE MatMenge=0"
Set rsmat = db.OpenRecordset(sql, dbOpenDynaset)
Do Until rsmat.EOF
lMatID = Nz(rsmat!MatID, 0)
sql = "DELETE * FROM t_MaterialFrist WHERE MatID=" & lMatID
db.Execute sql, dbFailOnError
sql = "DELETE * FROM t_MaterialRes WHERE MatID=" & lMatID
db.Execute sql, dbFailOnError
sql = "DELETE * FROM t_MatDokumente WHERE ANL_ID=" & lMatID
db.Execute sql, dbFailOnError
sql = "DELETE * FROM t_MatNotiz WHERE ANL_ID=" & lMatID
db.Execute sql, dbFailOnError
sql = "DELETE * FROM t_MatTechnisch WHERE ANL_ID=" & lMatID
db.Execute sql, dbFailOnError

rsmat.MoveNext
Loop
rsmat.Close
Set rsmat = Nothing

DBEngine.Idle dbRefreshCache '(???)

sql = "DELETE * FROM t_Material WHERE MatMenge=0"
db.Execute sql, dbFailOnError '<- Fehler 3218

Bei diesem letzten Execute kommt der Fehler. Habe probiert ob ich mit
DBEngine.Idle dbRefreshCache vielleicht die vorherige Aktion auf dieser
Tabelle abschliessen kann. hat nicht geholfen.
Beheben kann ich das zwar, indem ich das Löschen des Datensatzes mit
"rsmat.delete" in die Schleife verlege, aber prinzipiell müßte doch auch
die obige Variante funktionieren? Bzw wie kann man die zum Funktionieren
bringen??? Der Fehler muß ja irgendeine Ursache haben ...



Eventuell den Fehler abfangen, warten und dann ein Resume?

Jürgen

Ähnliche fragen