Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: herb54 am August 18, 2018, 01:24:01

Titel: Datensatz löschen über Schaltfläche funktioniert nicht mehr in einem Formular
Beitrag von: herb54 am August 18, 2018, 01:24:01
Hallo, ich habe derzeit ein Problem, dass mir die letzten Haare noch ausfallen lässt:

Ich habe zwei Formulare. Jedes Formular ist mit einer eigenen Tabelle verbunden.
In beiden Formularen gibt es ejnen Button "Datensatz löschen". Hier der Code der in beiden Formularen für die Schaltfläche steht (beispielhaft für ein Formular dargestellt):

Private Sub Befehl69_Click()
On Error GoTo Err_Befehl69_Click

'Felder Suchen ausblenden
Me.Weitersuchen.Visible = False
Me.Kombinationsfeld35.Visible = False

'Eingabe erlauben
Me.AllowEdits = True
Me.AllowAdditions = True
Me.AllowDeletions = True

    'Datensatz löschen
    DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
    DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
     'DoCmd.GoToRecord , , acNewRec
     
'Eingabe erlauben
Me.AllowEdits = False
Me.AllowAdditions = False
Me.AllowDeletions = False
Exit_Befehl69_Click:
    Exit Sub

Err_Befehl69_Click:
    MsgBox Err.Description
    Resume Exit_Befehl69_Click
   
End Sub

Bis jetzt ging das einwandfrei. Nun passiert plötzlich in einem Formular nach Betätigen der Schaltfläche folgendes:
Ohne  die Meldung "Sie versuchen 1 Datensatz zu löschen...." wird der Datensatz gelöscht und gleichzeitig ein neuer angelegt und der Datenzeiger geht auf diesen neuen Datensatz.
Im zweiten Formular geht alles einwandfrei. Was kann ich hier machen bzw. ist das Problem schon einmal aufgetreten? Ich selbst bin etwas befremdet, da dies die ganze Zeit einwandfrei funktioniert hat. Im Voraus vielen Dank!
Grüße
Herbert
Titel: Re: Datensatz löschen über Schaltfläche funktioniert nicht mehr in einem Formular
Beitrag von: herb54 am August 18, 2018, 01:28:18
Habe das Ganze auch schon probiert indem ich eine neue Schaltfläche angelegt habe nur mit dem Code der automatisch erzeugt wird - Ergebnis wie vorher!
Titel: Re: Datensatz löschen über Schaltfläche funktioniert nicht mehr ...
Beitrag von: Beaker s.a. am August 18, 2018, 14:08:57
Hallo Herbert,
VBA macht das was du sagst.
'DoCmd.GoToRecord , , acNewRec
Ist diese Zeile in beiden Formularen auskommentiert?

DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
Echt ätzend, dass MS immer noch diese Codezeilen aus der Steinzeit generiert  >:(.
Ich würde DoCmd.RunCommand acCmdDeleteRecord
verwenden bzw. per SQL löschen

Dim sSQL As String
sSQL = "DELETE FROM DeineTabelle WHERE ID = " & Me.FeldMitID
CurrentDb.Execute sSQL, dbFailOnError
Me.Requery

(Namen anpassen)

gruss ekkehard
Titel: Re: Datensatz löschen über Schaltfläche funktioniert nicht mehr in einem Formular
Beitrag von: Lachtaube am August 18, 2018, 15:04:28
Man kann auch im Recordset bzw. besser im RecordsetClone des Formulars einen Datensatz löschen und bestimmen, welcher Datensatz anschließend dargestellt werden soll.   Dim bm() As Byte

   If Me.NewRecord Then Exit Sub 'hier ist nichts zu löschen

   'ggf. noch MsgBox-Gedöns wie: 'Wollen Sie den Datensatz wirklich löschen?'
   'einpflegen und eine Fehlerbehandlung hinzufügen.

   'aktuellen Datensatz löschen und nachfolgenden Datensatz anzeigen

   With Me.RecordsetClone
      'synchronisieren
      .Bookmark = Me.Bookmark
      'zum nächsten Datensatz marschieren
      .MoveNext
      If Not .EOF Then
         'Datensatz merken
         bm = .Bookmark
         'zurück zum zu löschenden Datensatz
         .Bookmark = Me.Bookmark
         'Löschen
         .Delete
         'synchronisieren
         Me.Bookmark = bm
      Else
         'wir sind schon beim letzten Datensatz
         .MovePrevious
         'Löschen
         .Delete
         'zum letzten Datensatz marschieren
         .MoveLast
         'wenn es diesen gibt, synchronisieren
         If Not .EOF Then Me.Bookmark = .Bookmark
      End If
   End With
Einstellungen wie AllowEditions, etc. müssen nicht geändert werden. Die üblichen Events beim Löschen von Datensätzen werden auch nicht ausgelöst.
Titel: Re: Datensatz löschen über Schaltfläche funktioniert nicht mehr in einem Formular
Beitrag von: herb54 am August 18, 2018, 15:20:33
Zuerst mal vielen Dank,

habe leider alles ausprobiert - ohne Erfolg! Was mich am meisten wundert ist, dass die Meldung "Sie versuchen 1 Datensatz zu löschen..." nicht mehr erscheint und einfach ohne Zustimmung gelöscht wird. Zu Ekkehard: Ich hatte die Zeile mit dem NewRecord zunächst in beiden Formularen und wollte nach dem Löschen einen neuen Datensatz anlegen. Habe dies aber wieder entfernt. Was halt so merkwürdig ist, ist dass das Löschen in dem anderen Formular mit exakt dem gleichen Code funktioniert!
Gruß
Herbert
Titel: Re: Datensatz löschen über Schaltfläche funktioniert nicht mehr in einem Formular
Beitrag von: herb54 am August 18, 2018, 15:33:18
Hallo Lachtaube, was jetzt interessant bei deinem Code ist: Hier bekomme ich eine Laufzeitfehlermeldung:
Laufzeitfehler 3021 - Kein aktueller Datensatz. Und dies obwohl ich diesen Datensatz abgespeichert und zur Sicherheit noch mal einen neuen Datensatz dazu angelegt habe.
Außerdem reagiert die Schaltfläche erst beim zweiten Klicken!
???...

Gruß Herbert
Titel: Re: Datensatz löschen über Schaltfläche funktioniert nicht mehr in einem Formular
Beitrag von: herb54 am August 18, 2018, 15:44:22
Hallo zusammen,

ich habe den Fehler gefunden. Ich hatte bei diesem Formular im Ereignis "Beim Anzeigen"
ein Kontrollkästchen:  Me.Rechnung = False gesetzt. Ich hätte nie gedacht, dass diese Angabe  eine derartige Fehlfunktion auslösen könnte.
Euch allen vielen Dank für die Hilfe!
Grüße
Herbert
Titel: Re: Datensatz löschen über Schaltfläche funktioniert nicht mehr ...
Beitrag von: Beaker s.a. am August 18, 2018, 15:59:24
Hallo Herbert,
Tja, Form_Current (Beim Anzeigen) wird eben bei JEDEM DS-Wechsel
ausgelöst. Auch nach dem Löschen wird ein DS angezeigt (sofern es
noch welche gibt). Und in Lachtaubes Code tritt dieses Ereignis durch
das Bookmark-"Gehopse" sogar mehrfach ein.
Durch das Setzen eines Wertes (Me.Rechnung = False) wird dein
Formular Dirty und der DS kann nicht gelöscht werden.
Vorsichtshalber fügst du deshalb vielleicht an den Anfang der Prozedur
diese Zeile ein
If Me.Dirty Then Me.Dirty = False

gruss ekkehard
Titel: Re: Datensatz löschen über Schaltfläche funktioniert nicht mehr in einem Formular
Beitrag von: herb54 am August 18, 2018, 18:08:41
Hallo Ekkehard,
super, vielen Dank!
Gruß
Herbert