PDA

Vollständige Version anzeigen : Tabelle löschen per VBA


Stahlbanane
19.04.2011, 21:52
Hallo,
für das Erstellen eines Recordsets zur Anzeige in einem Formular verwende ich eine temporäre Tabelle.
Wenn ich dieses Formular schließe, bekomme ich folgende Fehlermeldung, obwohl ich das RS zuvor auf Nothing setze.

"Das Datenbankmodul konnte die Tabelle "XY" nicht sperren, da sie bereits von einem anderen Benutzer oder Vorgang bearbeitet wird."

Was mache ich falsch? Wie kann ich erreichen, dass diese Tabelle ohne Umwege gelöscht wird?

Höre gerne.

Gruß
Jan
///

ebs17
19.04.2011, 22:13
Wird das Recordset auch geschlossen?

Stahlbanane
19.04.2011, 22:16
Hallo,
ich schreibe: "Set RS = nothing"?
Schließt das nicht das Recordset?

Gruß
Jan
///

Marsu65
19.04.2011, 22:29
Hallo!
rs.Close: Set rs = Nothing

Thomas Möller
20.04.2011, 06:44
Hallo Jan,

Was mache ich falsch? Wie kann ich erreichen, dass diese Tabelle ohne Umwege gelöscht wird?

zeigst mal bitte den vollständigen Code, der zum Fehler führt. Vielleicht lässt sich daraus mehr erkennen.

CU

Stahlbanane
20.04.2011, 08:25
Hallo Thomas,
das ist wahrscheinlich zu unübersichtlich, da sich der Code auf 2 umfangreiche Module und ein Formular erstreckt. Vielleicht hilft es, die Struktur eingehender zu beschreiben?

Die Daten für das RS liegen in einer temporären Tabelle. Beim Öffnen des Formulars wird hieraus ein public DAO-RS erstellt, welches dem Formular zugewiesen wird. Das funktioniert wie gewünscht.
Direkt nach Zuweisung wird das RS auf Nothing gesetzt, seit gestern habe ich davor noch ein "close" gesetzt. Das hatte ich bis zu dem gestrigen Tipp nicht drin, allerdings bringt es auch keine sichtbare Veränderung.
Wenn ich das Formular schließe, möchte ich die temporäre Tabelle ebenfalls löschen. Dies habe ich mit den beiden folgenden Anweisungen versucht, beide liefern jedoch die gleiche Fehlermeldung (siehe oben).

DoCmd.RunSQL "DROP TABLE temp_tbl_Debitoren_RG_Ausgang;"
oder
DoCmd.DeleteObject acTable, "temp_tbl_Debitoren_RG_Ausgang"

Interessant ist, dass diese Fehlermeldung nicht auftaucht, wenn die die Prozedur nach dem Fehler nochmal ausführe, ohne das RS nochmal zu erstellen - also einfach nur die Prozedur "Löschen" nochmal starte.

Da die temporäre Tabelle nicht mehr benötigt wird, suche ich zur Not auch einen Code, der diese Tabelle "ohne Rücksicht" einfach löscht.

Gruß
Jan
///

Thomas Möller
20.04.2011, 08:40
Hallo Jan,

Wenn ich das Formular schließe, möchte ich die temporäre Tabelle ebenfalls löschen.

das Problem liegt wohl darin, dass das Formular noch an die Daten gebunden ist und dementsprechend die Tabelle noch gesperrt ist.

Vielleicht ist es schon ausreichend, wenn Du vor dem Löschen der Tabelle das Formular vom Recordset trennst, z.B.:

Me.Recordset = Nothing

HTH

Stahlbanane
20.04.2011, 11:26
Hallo Thomas,

DANKE! Das war es.
Und vermutlich erklärt das auch noch einige andere Fehler in anderen Formularen, mit denen ich bisher so nicht wirklich etwas anzufangen wusste und schlichtweg hingenommen habe.

Gruß
Jan
///