Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: maniaspets am Oktober 12, 2010, 10:15:20

Titel: Löschbutton für Dantensatzlöschung
Beitrag von: maniaspets am Oktober 12, 2010, 10:15:20
Benötige einen Button zum Löschen eines Datensatzes in einem Formular jedoch soll nachgefragt werden ob er wirklich gelöscht werden soll

mfg Manuel
Titel: Re: Löschbutton für Dantensatzlöschung
Beitrag von: database am Oktober 12, 2010, 11:13:09
Hallo,

jetzt wirst du mir aber langsam unheimlich!

Hast du schon einmal versucht solche Sachen in der Online-Hilfe von Access zu recherchieren?
Wir helfen dir echt gerne, aber verwechsle das nicht damit, dir eine Applikation basteln zu lassen -
sonst werden dir die barmherzigen Schwestern in Ried früher oder später den Hintern versohlen!  :D :D ;)

Erstelle auf deinem Formular einen Button, den nennst du cmdAdresseLoeschen - und NICHT anders!
Ins Klick-Ereignis KOPIERST du dann den folgenden Code - NICHT abschreiben, KOPIEREN!


Private Sub cmdAdresseLoeschen_Click()

   If Not IsNull(Me.ID) Then
       'Windows-Standardmeldungen ausschalten
       DoCmd.SetWarnings False
       If MsgBox("Möchten Sie den aktuellen Datensatz" & vbCrLf & _
                   "unwiederbringlich aus der Daenbank löschen?", _
                   vbOKCancel + vbQuestion + vbDefaultButton2, "Adressdaten") = vbOK Then

                   'Datensatz endgültig löschen
           DoCmd.RunSQL "DELETE FROM tbl_Adressen WHERE ID=" & Me.ID
           'Formulardaten aktualisieren damit nicht #gelöscht angezeigt wird
           Forms!Adressetiketten1.Form.Requery
           'Such-Kombi aktualisieren
           Me.cboNamen.Requery
       Else
           MsgBox "Der Löschvorgang wurde abgebrochen!", vbInformation, "Adressdaten"
       End If
       
   Else
       MsgBox "Es wurde kein Datensatz zum Löschen ausgewählt", vbInformation, "Adressdaten"
           
   End If
   
   'Windows-Standardmeldungen einschalten
   DoCmd.SetWarnings True
   
End Sub


Formuar speichern und ausprobieren - ACHTUNG, das Ding ist scharf gemacht, es funktioniert!
Wenn du auf JA klickst wird gelöscht - gnadenlos! ::)

Grüße
Peter
Titel: Re: Löschbutton für Dantensatzlöschung
Beitrag von: maniaspets am Oktober 12, 2010, 11:16:27
Basteln lasse ichs mir nicht ich versuchs auch selber funktioniert auch halbwegs nur ein teil hatte nicht funktioniert.

hoffe aber nicht das die Schwestern mir den Hintern versohlen^^ ;)

aber Danke
Titel: Re: Löschbutton für Dantensatzlöschung
Beitrag von: oma am Oktober 12, 2010, 11:20:14
Hallo,

löschen kannst du mit einem Button:

Private sub Loeschen_click()
 On Error resume next
 DoCmd.RunCommand acCmdDeleteRecord
End Sub


Es wird der aktuelle DS gelöscht; zum nachfragen kannst du folgenden Code übernehmen:

Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
   Dim Meldung As String
   Meldung = "Soll der DS wirklich gelöscht werden ?"
   If MsgBox(Meldung, vbInformation + vbYesNo, "Dein Name") <> vbYes Then
       Cancel = True
   End If
Response = acDataErrContinue
End Sub



und wenn du willst, noch eine Rückmeldung:


Private Sub Form_AfterDelConfirm(Status As Integer)
   If Status = acDeleteOK Then
       MsgBox "Der DS wurde erfolgreich gelöscht", vbInformation, "Dein Name"
   Else
       MsgBox "Der DS wurde nicht gelöscht", vbInformation, "Dein Name"
   End If
End Sub



so wird immer abgefragt, egal wie du löscht (ob mit Button, oder mit Del-Taste nach markieren des DS)

Gruß Oma


PS

@Peter, ich bin wahrscheinlich nicht so schnell im Schreiben wie du

@ Manuel: mein Code hat den Vorteil( gegenüber Peters Code), das bei Löschen immer gefragt wird, auch wenn du nicht mit dem Code löscht!!
Titel: Re: Löschbutton für Dantensatzlöschung
Beitrag von: maniaspets am Oktober 12, 2010, 11:28:02
jop da hast du Recht.

Danke Für die Hilfe
Titel: Re: Löschbutton für Dantensatzlöschung
Beitrag von: database am Oktober 12, 2010, 11:51:08
Zitatmein Code hat den Vorteil( gegenüber Peters Code), das bei Löschen immer gefragt wird, auch wenn du nicht mit dem Code löscht

@oma
Richtig, mag ich nicht bestreiten - allerdings muss ich dem Benutzer dazu die Möglichkeit geben bzw. lassen aus einer DB was zu löschen und dabei nicht den von mir gewünschten Weg zu gehen.  ;)
Wobei ich nichts löschen lassen würde (zumindest nicht leichtfertig - und schon gar nicht vom Benutzer selbst)


Titel: Re: Löschbutton für Dantensatzlöschung
Beitrag von: maniaspets am Oktober 12, 2010, 12:06:14
Ja waren wir auch der Meinung aber sie haben darauf bestanden das sie auch sachen löschen müssen

Und da nur sie dieses Programm bekommen ist es nicht so schlimm wenn sie etwas falsches löschen da es für sie schlecht ist. ;)
Titel: Re: Löschbutton für Dantensatzlöschung
Beitrag von: oma am Oktober 12, 2010, 12:23:52
Hallo,

schließe mich Peters Meinung an. Grob gesagt:  In einer DB kann kein User etwas löschen! Höchstens bestimmte Vermerke setzen (DatumLöschung, NichtAktuell usw.) mit denen dann bestimmte DS z.B nicht mehr angezeigt werden usw.

Aber auch wenn ich den User alle Möglickeiten der Löschung nehme, außer über Button, ist meine Lösung doch nicht schlecht ;D

Gruß Oma
Titel: Re: Löschbutton für Dantensatzlöschung
Beitrag von: sigma5345 am Oktober 12, 2010, 12:31:36
Zitat von: maniaspets am Oktober 12, 2010, 12:06:14
Ja waren wir auch der Meinung aber sie haben darauf bestanden das sie auch sachen löschen müssen

Bei mir kann man auch nur "gelöscht Flags" setzen und ich filter dann halt in allen Ansichten danach.
Ich hatte auch schon 2 mal den Fall, dass ein Anruf kam "Ich habe das was gelöscht - wollte es aber nicht". Da ist das Flag wieder rausnehmen eine sehr einfacher Weg und hinterher sind alle glücklich.

gruß
sigma
Titel: Re: Löschbutton für Dantensatzlöschung
Beitrag von: database am Oktober 12, 2010, 12:46:14
@Manuel
ZitatUnd da nur sie dieses Programm bekommen ist es nicht so schlimm wenn sie etwas falsches löschen da es für sie schlecht ist
...ist mal so eben schnell hingesagt - Tatsache ist aber, dass DU als Entwickler dafür sorgen solltest dass genau DAS nicht passiert -
dem Doc ist's egal wie, wenn seine Daten futsch sind bleibst DU als Prügelknabe übrig!
Ich komme nochmal kurz auf die schmerzliche Aktion 'Hinterteil versohlen' zu sprechen ...   :D :D :D

@oma
nein, nein, die ist nicht nur nicht schlecht, die ist wirklich und ehrlich ausgesprochen gut - *schleim*    ;)  ;D ;)

Mit einer klitzekleinen Erweiterung der Tabelle (Feld aktiv ja/nein) wäre das mehr oder weniger 'datensicher' (besser benutzersicher) zu bewerkstelligen.
Datenherkunft fürs Formular dann eben von Tabelle auf Abfrage umstellen mit der Einschränkung "WHERE aktiv = True"
Ebenso diese WHERE-Klausel in die SQL des Suchkombi verfrachten.



Private Sub cmdAdresseLoeschen_Click()

   If Not IsNull(Me.ID) Then
       'Windows-Standardmeldungen ausschalten
       DoCmd.SetWarnings False
       'Dem Benutzer die große Löschaktion anbieten
       If MsgBox("Möchten Sie den aktuellen Datensatz" & vbCrLf & _
                   "unwiederbringlich aus der Daenbank löschen?", _
                   vbOKCancel + vbQuestion + vbDefaultButton2, "Adressdaten") = vbOK Then

                   'Datensatz zur Löschung vormerken
           DoCmd.RunSQL "UPDATE tbl_Adressen SET aktiv = False WHERE ID=" & Me.ID
           'Formulardaten aktualisieren damit keine inaktiven angezeigt werden
           Forms!Adressetiketten1.Form.Requery
           'Such-Kombi aktualisieren
           Me.cboNamen.Requery
       Else
           MsgBox "Der Löschvorgang wurde abgebrochen!", vbInformation, "Adressdaten"
       End If
       
   Else
       MsgBox "Es wurde kein Datensatz zum Löschen ausgewählt", vbInformation, "Adressdaten"
           
   End If
   
   'Windows-Standardmeldungen einschalten
   DoCmd.SetWarnings True
   
End Sub




und entsprechend oma's Code


Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
   Dim Meldung As String
   Meldung = "Sie sind nicht berechtigt diese Aktion auszuführen!" & vbcrlf & _
                     "Verwenden Sie dazu den vorgesehenen Löschbutton!"
   MsgBox(Meldung, vbInformation , "Adressdaten")
   Cancel = True
   Response = acDataErrContinue
End Sub


...um auszuschließen dass 'anders' als vorgesehen gelöscht wird.

hab's in der Schnelle nicht ausprobiert, sollte aber funktionieren

LG
Peter

EDIT: Deutsch ... *grrrrr*
Titel: Re: Löschbutton für Dantensatzlöschung
Beitrag von: maniaspets am Oktober 12, 2010, 13:34:29
Da hast du Wiederrum auch recht Peter.

Komme immer näher ans versohlen... ;) ;)

werd mir das jetzt noch mal überlegen ob ich ihnen die rechte zum löschen gebe ;)