![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBC
Löschen eines Datensatzes verhindern
Hallo,
ich versuche gerade das ein Datensatz der gelöscht werden soll geprüft wir und bei einem bestimmten Wert dem Anwender noch mal die Möglichkeit gegeben wird den Löschvorgang abzubrechen. Ereigniss BeforeDelete. Der Datensatz wird aber immer gelöscht
Delphi-Quellcode:
In der Unit DB geht es dann in der Procedure weiter bzw springt gleich wieder bei
procedure TDatenModule1.IAuftragBeforeDelete(DataSet: TDataSet);
begin IAuftrag.Tag := 1; // andere Ereignisse abbrechen // keine Rechnung geschrieben aber Auftrag schon ausgeführt if ((IBCQRechnunginfo.RecordCount = 0) and (IAuftragAU_FERTIG.AsString > '')) then begin if MessageDlg('Auftrag fertig ohne Rechnung. wirklich löschen? ', mtConfirmation, [mbYes, mbNo], 0, mbYes) = mrNo then begin DataSet.cancel; end; end; end; procedure TDatenModule1.IAuftragAfterEdit(DataSet: TDataSet); begin if IAuftrag.Tag > 0 then exit; case State of dsEdit, dsInsert: raus. :idea:ist auch klar
Delphi-Quellcode:
Kann mir jemand sagen wie ich das Löschen nachdem die Anfrage "soll der Datensatz gelöscht werden" mit Ja bestätigt wurde doch noch verhindern kann?
procedure TDataSet.Cancel;
procedure CancelNestedDataSets; var I: Integer; begin if Assigned(FNestedDataSets) then for I := 0 to FNestedDataSets.Count - 1 do if FNestedDataSets[I].Active then FNestedDataSets[I].Cancel; end; var IsInserting: Boolean; begin case State of dsEdit, dsInsert: begin IsInserting := False; CancelNestedDataSets; DataEvent(deCheckBrowseMode, 0); if not (csDestroying in ComponentState) then begin DoBeforeCancel; IsInserting := State = dsInsert; if IsInserting then DoBeforeScroll; end; UpdateCursorPos; InternalCancel; FreeFieldBuffers; SetState(dsBrowse); if not (csDestroying in ComponentState) then begin Resync([]); DoAfterCancel; if IsInserting then DoAfterScroll; end; end; end; end; Vielen Dank Michael |
AW: Löschen eines Datensatzes verhindern
Hallo,
warum prüfst du nicht vor dem Löschen auf ev. Abbruchbedingungen? Oder hast Du ein DBGrid zur Anzeige? Hier wird übrigens Abort benutzt ![]() |
AW: Löschen eines Datensatzes verhindern
Jupp, Abort oder eine andere Exception.
Cancel kann eh nicht funktionieren, da im Before der Zustand sich noch nicht geändert hatte und ein Rücksetzen somit nichts bringt, abgesehn davon, dass Cancel nur Einfluss auf Edit und Insert hat. |
AW: Löschen eines Datensatzes verhindern
wir machen das meistens mit einem trigger, der eine exception auslöst
CREATE OR ALTER trigger angebot_bd0 for angebot active before delete position 0 AS begin if (upper(coalesce(old.txt,''))<>'LOESCHEN') then exception error '#BRPMSG#Löschen nur dann möglich, wenn im Angebot in der Bezeichnung LOESCHEN steht#BRPEND#'; end wenn jemand das in der Applikation probiert, geht das eben nicht versehentlich, aber wenn es aus welchen gründen auch immer wirklich mööglich sein soll, dann muss er vorher das txt feld ändern jund dann geht das. weil das ein trigger ist, funtkioniert das auch kascadierung, hat schon häufiger mal verhindert, das jemand was versehentlich löscht Technisch kannst du die Änderung ähnlich auch aus deiner Applikation via TDataset auslösen, aber das könnte dann seltsam reagieren |
AW: Löschen eines Datensatzes verhindern
Zitat:
|
AW: Löschen eines Datensatzes verhindern
Zitat:
Und zwar in dem Fall, das Abort der gewählten Aktion "delete". Wenn man clientseitig, also noch bevor Trigger zuschlagen, den Bearbeitungsvorgang in der Datenmaske revidieren möchte, wird der gewählte Vorgang- hier "delete"- aborted. Geht natürlich auch für andere Operationen. "Wollen sie diesen Sch.. wirklich speichern?". Auch da kann abort helfen. Also wenn der Confirmation Dialog keine Bestätigung des Löschens liefert, sollte ein : dataset.abort; genügen, um die Aktion abzubrechen. |
AW: Löschen eines Datensatzes verhindern
dataset.abort; :-D:-D
vielen Dank für die schnelle Hilfe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz