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
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
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
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!!
jop da hast du Recht.
Danke Für die Hilfe
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)
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. ;)
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
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
@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*
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 ;)