bestimmten Datensatz aus Unterformular löschen

Moderator: ModerationP

bestimmten Datensatz aus Unterformular löschen

Beitragvon accessGast » 17. Sep 2021, 10:36

Ich habe ein HFO in welchem mehrere UFO eingebettet sind. Datenherkunft sind in jedem UFO Abfragen.
Die Datensätze in dem UFO sind als (Endlosformular) abgebildet. Ich habe nun einen Button im Detailbereich der UFO's angelegt (erscheint also in jedem Datensatz)
der den betreffenden Datensatz aus der Tabelle löschen sollte. Ich habe verschiedenes getestet. Datensatz wurde auch entfernt. Jedoch nach F5 ist er wieder da. Also aus der Tabelle nicht gelöscht, sondern vermutlich nur in der Abfrage.

Daher habe ich es jetzt so probiert. Jedoch passiert da gar nichts. Was mach ich falsch?

Code: Alles auswählen
Private Sub BtnLoeschen_Click()

Dim DeinPasswort As String

 DeinPasswort = InputBox(Aktion, "Zum Löschen wird ein Passwort benötigt!")

 If DeinPasswort = "123" Then

'Function datensatz_loeschen()
    Dim db As DAO.Database, rs As DAO.Recordset
    Dim datensatz As Long
   
    Set db = CurrentDb
    Set rs = db.OpenRecordset("abf_fristenAuftragW", dbOpenDynaset)
    datensatz = Me!regID
    rs.FindFirst "regID Like '" & datensatz & "'"
    rs.Delete
    Me.Requery
'End Function
   
   
 Else
 MsgBox "Sie haben ein Falsches Passwort eingegeben bzw. sind zum Löschen nicht berechtigt!"
 End If

End Sub
accessGast
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 135
Registriert: 20. Apr 2016, 11:13

Re: bestimmten Datensatz aus Unterformular löschen

Beitragvon Bitsqueezer » 17. Sep 2021, 13:11

Hallo,

also eine ID wäre normalerweise ein Long Integer. Daher schließt man den Wert nicht in Hochkommata ein, auch wenn Access das z.T. toleriert.

Das Ausführen von "Delete" setzt voraus, daß die Abfrage editierbar ist. Befindet sich mehr als eine Tabelle in der Abfrage, wird das schon haarig.

Löschen ist endgültig, F5 fragt nur neu ab und gibt die Daten aus. Ein einmal gelöschter Datensatz ist futsch und wird bei Neuabfragen nicht mehr erneut erscheinen - ansonsten hast Du tatsächlich nicht gelöscht.

Per Recordset zu löschen, ist ungenau, wenn die Definition nicht genau bekannt ist.

Ich würde hier einen DELETE-SQL-Befehl verwenden, der zwingend nur eine Tabelle als Angabe verwendet und dann exakte Parameterwerte - wenn Du eine ID hast, die Du löschen willst, ist alles Andere bedeutungslos, Du brauchst keine Abfrage und auch kein "LIKE", sondern ein "DELETE * FROM DeineTabelle WHERE regID = x", wobei x Deine ID ist.

Wenn die ID die ist, in der der Cursor steht, kannst Du auch einfach das Recordset des Formulares verwenden, um "Delete" auszuführen. Mit dem gleichen Problem natürlich, wie oben beschrieben. Ein Extra-Recordset ist in keinem Fall notwendig, zumal das zweite hier die gleiche Abfrage verwendet. Nicht zu vergessen, "MoveNext" oder "MoveFirst" auszuführen, siehe Anmerkungen in der Doku:

https://docs.microsoft.com/de-de/office ... -recordset

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8465
Registriert: 21. Jun 2007, 12:17

Re: bestimmten Datensatz aus Unterformular löschen

Beitragvon KlausMz » 17. Sep 2021, 14:12

Hallo,
wenn sich der Button in jedem Datensatz wiederholt, wird ja beim Buttonklick der Focus auf diesen Datensatz gesetzt.
Dann genügt doch einfach der Einzeiler
Code: Alles auswählen
DoCmd.RunCommand acCmdDeleteRecord

zum Löschen dieses DS.
Die Sicherheitsabfrage lässt sich noch abschalten.
Was spricht gegen diese einfache Lösung ?
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 40253
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: bestimmten Datensatz aus Unterformular löschen

Beitragvon Jogeli » 17. Sep 2021, 15:20

Hallo

DoCmd.RunCommand acCmdDeleteRecord funktioniert bei mir.
Folgender Code schaltet auch noch die Warnmeldung ab.

Code: Alles auswählen
Private Sub cmdDelete_Click()
On Error GoTo Errorhandler

    If Not IsNull(Me.Verkauf) Then
        MsgBox "Ein Artikel, für den bereits eine Quittung ausgestellt worden ist, " _
        & vbCrLf & "kann nicht gelöscht werden", vbInformation, "Löschen nicht möglich"
        Exit Sub
    End If
       
    'Mit eigener Bestätigungsmeldung löschen oder eben nicht...
    DoCmd.SetWarnings False
        If MsgBox("Möchten sie diesen Datensatz wirklich löschen?", vbYesNo + vbDefaultButton2 + vbQuestion, "Wirklich löschen?") = vbYes Then
            DoCmd.RunCommand acCmdDeleteRecord
            DoCmd.GoToRecord , , acFirst
        Else
           
        End If
    DoCmd.SetWarnings True
   
Exit_Errorhandler:
    Exit Sub

Errorhandler:
   
    'Fehler Nr. 2501, Aktion RunCommand abgebrochen, abfangen...
    If err.Number = 2501 Then       '..einfach nichts machen
    Else
        MsgBox "Fehler Nr. " & err.Number & vbCrLf & err.Description
    End If
    Resume Exit_Errorhandler

End Sub
Gruss
Köbi
Jogeli
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 50
Registriert: 20. Feb 2016, 14:07

Re: bestimmten Datensatz aus Unterformular löschen

Beitragvon accessGast » 17. Sep 2021, 15:49

Vorab vielen, vielen Dank für die Anregungen , Hinweise und Lösungsansätze

@Bitsqueezer
Leider verstehe ich nicht alles was Du schreibst, dazu bin ich trotz meiner „langen“ Zeit in der ich in Access unterwegs bin, zu unwissend – da wie bereits schon mehrfach geschrieben – ich immer nur für meine Arbeitsorganisation Lösungen suche – und im Hauptaufgabenfeld nicht "der" Programmierer bin und leider, wirklich leider auch privat keine Zeit habe, das immer alles zu vertiefen. Ich wünschte es wäre anders. Kurzum – ich kann damit nicht viel anfangen. Trotzdem natürlich Danke, denn es ist immer etwas dabei, was man sich rausnehmen kann oder was weiterhilft beim Denken und Handeln.

@KlausMz
Hallo. Das hatte ich ja schon probiert. Der betreffende DS wird auch anstandslos gelöscht. Jedoch nach Aktualisierung ist er wieder da. Daher habe ich ja nach einem anderen Weg gesucht.

@Jogeli
Wie Klaus.. Genau diese Codezeile
Code: Alles auswählen
DoCmd.RunCommand acCmdDeleteRecord
allein löscht zwar den DS aus dem UFO, jedoch nach Aktualisierung oder schließen und öffnen, steht der DS wieder drin. (Er wird also scheinbar nicht aus der Tabelle gelöscht, sondern nur aus der Abfrage hinter dem UFO)

Gelöst habe ich es dann Tatsache so:

Code: Alles auswählen
Private Sub BtnLoeschen_Click()

Dim DeinPasswort As String

 DeinPasswort = InputBox(Aktion, "Zum Löschen wird ein Passwort benötigt!")

 If DeinPasswort = "123" Then
   
Dim strSQLD As String
strSQLD = "DELETE * FROM [t_mängelStamm] WHERE regID = " & Me.regID
CurrentDb.Execute strSQLD, dbFailOnError
Me.Requery

   
 Else
 MsgBox "Sie haben ein falsches Passwort eingegeben!"
 End If

End Sub



Und das funktioniert perfekt. Der Datensatz wird sofort und ohne Nachfrage aus der Tabelle entfernt.

Vielen Dank an dieses Forum.
accessGast
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 135
Registriert: 20. Apr 2016, 11:13


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 19 Gäste