Datensatz löschen funktioniert nicht immer

Hallo,
ich habe ein Formular in tabellarischer Ansicht.
Im Kopfbereich sind Kombinationsfelder über jeder Spalte, die alle Einträge (mit distinct) der jeweiligen Spalte enthalten. So kann man anhand der Auswahl genau die Datensätze heraussuchen lassen, die den gewählten Eintrag in dieser Spalte besitzen. Quasi als Filter.

Im Fußbereich hab ich u.a. eine Schaltfläche, die zum Löschen des Datensatzes dient, der gerade den Fokus hat.
Das Löschen funktioniert nur, wenn in dem Formular ALLE Datensätze der referenzierten Tabelle angezeigt werden.
Ansonsten höre ich nur ein „Ping“ durch die Lautsprecher, aber sehe nirgendswo eine Fehlermeldung oder ähnliches.

Den Löschvorgang mache ich mit DoCmd.RunCommand(acCmdDelete).
Wie erreiche ich es, dass der aktive Datensatz auch bei einer gefilterten Ansicht gelöscht wird?

Gruß, Andi

Hallo Andreas,

Den Löschvorgang mache ich mit
DoCmd.RunCommand(acCmdDelete).
Wie erreiche ich es, dass der aktive Datensatz auch bei einer
gefilterten Ansicht gelöscht wird?

nutze das dir gegebene …

  • Formular im Editierungsmodus öffnen
  • Symbolleiste: Toolbox
  • Schaltfläche einfügen
  • im dann angezeigten Assistenten die Löschfunktion wählen
  • den VBA Code des Taste ansehen (um daraus zu lernen)

Grüße aus Schwerin
Wolfgang
(Netwolf)

  • Formular im Editierungsmodus öffnen
  • Symbolleiste: Toolbox
  • Schaltfläche einfügen
  • im dann angezeigten Assistenten die Löschfunktion wählen
  • den VBA Code des Taste ansehen (um daraus zu lernen)

Das habe ich auch schon gemacht.
Der erzeugte Code verwendet hier die DoMenuItem-Methode, die veraltet ist und von der RunCommand-Methode abgelöst wurde.

Aber auch hier lässt sich der Datensatz nur löschen, wenn ALLE Datensätze im Formular angezeigt werden.

Andi

Hi Andi,
Access arbeitet intern mit Recordsets. Das kann eine Tabelle oder ein Abfrageergebnis sein. Ob Du das Recordset bearbeiten kannst hängt davon ab, mit welcher Einstellung (LockType-Parameter) es geladen wurde. Der Standardwert ist „adLockReadOnly“, also schreibgeschützt.

Ich könnte mir vorstellen, dass in Deinem Formular anfangs die komplette Tabelle geladen wird und LockType = adLockOptimistic bzw adLockPessimistic ist (beide erlauben schreibenden Zugriff).
Sobald Du einen der eingebauten Filter anwendest, wird ein entsprechendes Recordset erzeugt und angezeigt, das dann aber schreibgeschützt geöffnet wird.

Im Code könnte das so aussehen:
Dim rs As New ADODB.Recordset
rs.Open Quelle, ActiveConnection, CursorType, LockType, Options

Vieleicht musst Du nur sicherstellen, dass die angezeigten Recordsets mit dem richtigen LockType-Parameter (s.o.) geöffnet werden.

Gruß
Dom

Ich könnte mir vorstellen, dass in Deinem Formular anfangs die
komplette Tabelle geladen wird und LockType = adLockOptimistic
bzw adLockPessimistic ist (beide erlauben schreibenden
Zugriff).
Sobald Du einen der eingebauten Filter anwendest, wird ein
entsprechendes Recordset erzeugt und angezeigt, das dann aber
schreibgeschützt geöffnet wird.

Den „Filter“ erstelle ich mir quasi selber.
Die Tabelle Mitarbeiter, auf der das Formular basiert, enthält u.a. die Spalte Nachname. Alle Nachnamen sind per

 SELECT DISTINCT Nachname FROM Mitarbeiter; 

in das Kombinationsfeld eingetragen.
Für das Kombinationsfeld habe ich diesen Code geschrieben:

Private Sub cbNachname\_AfterUpdate()
 Me.RecordSource = "select distinct \* from Mitarbeiterdaten where Nachname='" & cbNachname & "';"
End Sub

Im Code könnte das so aussehen:
Dim rs As New ADODB.Recordset
rs.Open Quelle, ActiveConnection, CursorType, LockType,
Options

Vieleicht musst Du nur sicherstellen, dass die angezeigten
Recordsets mit dem richtigen LockType-Parameter (s.o.)
geöffnet werden.

Kannst du mir dabei helfen, wie ich den Code auf mein Formular anpasse? Momentan bin ich in VBA noch nicht so bewandert.

Gruß, Andi

Lösch doch einfach mit:

Private Sub Loeschen\_Click()
 If not Isnull(Me!PersonalNr) then
 Currentdb.Execute "DELETE FROM Mitarbeiter WHERE Personalnr = " & Me!PersonalNr, dbFailOnError
 Me.Requery
 end if
end sub

Gruß aus dem Norden
Reinhard Kraasch

(http://www.dbwiki.de - das Datenbank-Wiki)

1 Like

Danke
Genau was ich brauchte :smile: