Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Löschbutton für Dantensatzlöschung

Begonnen von maniaspets, Oktober 12, 2010, 10:15:20

⏪ vorheriges - nächstes ⏩

maniaspets

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

database

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

maniaspets

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

oma

#3
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!!
nichts ist fertig!

maniaspets

jop da hast du Recht.

Danke Für die Hilfe

database

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)



maniaspets

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. ;)

oma

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
nichts ist fertig!

sigma5345

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

database

#9
@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*

maniaspets

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 ;)