AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DeleteQuery abbrechen?
Thema durchsuchen
Ansicht
Themen-Optionen

DeleteQuery abbrechen?

Ein Thema von barnti · begonnen am 16. Sep 2003 · letzter Beitrag vom 18. Sep 2003
Antwort Antwort
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

DeleteQuery abbrechen?

  Alt 16. Sep 2003, 15:12
Hallo,

ich möchte realisieren, dass wenn man einen Kunden löscht dieser nicht wirklich gelöscht wird sondern dessen Vertrag mit einem Endedatum versehen wird. Mein Vorgehen ist wie folgt:

Delphi-Quellcode:

Procedure BeforeDelete();
begin
  QueryKunde.Cancel;
  QueryVertrag.UpdateVertrag
end;
Ich schreibe also in das Beforedelete-Ereignis ein Aufruf zum canceln des Löschauftrages und schreibe ein neues Endedatum in den Vertrag des entsprechenden Kunden.

Das Problem: Der Kunde wird trotzdem gelöscht und sein Vertrag upgedated?!

Wo liegt mein Denkfehler?

Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2

Re: DeleteQuery abbrechen?

  Alt 16. Sep 2003, 22:26
Hallo barnti,

Cancel bei einer Query bewirkt nur, dass Aenderungen, die nach einem Edit oder Insert in die Datenmenge durchgefuehrt wurden, nicht uebernommen werden. Um das Delete abzubrechen, musst du ABORT benutzen (also eine stille Exception ausloesen).
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: DeleteQuery abbrechen?

  Alt 17. Sep 2003, 08:08
Hi,

das habe ich schon überlegt. Das Problem ist, dass nach dem abort ja der aktuelle Vorgang abgebrochen wird. So kann ich dann nicht erst die KundenQuery abbrechen und anschließend gleich den Vertrag updaten!?

Oder gibt es die Möglichkeit beide Vorgänge, KundenQuery abbrechen, Vertrag updaten, in einem Durchgang?

Gruß,

Barnti
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: DeleteQuery abbrechen?

  Alt 17. Sep 2003, 08:48
Wenn nicht gelöscht sondern geändert werden soll, wieso wird dann überhaupt das Löschen ausgelöst? Eine ähnliche Anforderung habe ich anders gelöst:

1. es gibt ein Statusfeld das bei Bedarf geändert wird (statt Löschung).
2. die Ergebnismengen aller Querys werden mit Hilfe des Statusfeldes eingeschränkt. Etwa so

Code:
  select * from TABELLE where (...bedingung...) [color=#ff005b]and (STATUS = 1)[/color]

Eine Löschung ist eben keine, sondern setzt nur das Statusfeld z.B. auf -1 o.ä. In Deinem Beispiel könnte man sogar das Enddatum dazu benutzen (...ist aber schlechter Stil)
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: DeleteQuery abbrechen?

  Alt 17. Sep 2003, 09:00
Hallo ihr zwei,

ich benutze den DBNavigator, stelle also die Standardfunktionen für DB-Operationen zur Verfügung. Deshalb auch die "echte" Funktion zum Löschen, die ich dann im "BeforeDelete" Ereignis umgehe, bzw anderweitig umsetze. Dazu:

Ich habe es doch mit einem "abort" bewerkstelligen können. Dazu editiere ich zunächst im "BeforeDelete" Ereignis den Vertrag und führe anschließend das "abort" durch. Habe also nur die Reihenfolge geändert. Das mir das jetzt erst ein-(auf)fällt liegt daran, dass ich nicht bedacht habe das die Vertragsänderung bereits direkt nach dem "VertragsQuery.open" auch mit einem "Commit" bestätigt wird.

Das neue Datum des Vertrage ist also schon in der DB abgelegt und commited. Anschließend, im "BeforeDelete" rufe ich dann abort auf.

So geht es!

Danke für die Anteilnahme. Ist doch immer wieder hilfreich sich auszutauschen (und sei es nur um sich einmal vom Coden abzulenken)!

Gruß,

Barnti
  Mit Zitat antworten Zitat
urs.liska

Registriert seit: 6. Aug 2003
Ort: Freiburg
195 Beiträge
 
Delphi 6 Professional
 
#6

Re: DeleteQuery abbrechen?

  Alt 17. Sep 2003, 12:52
Du musst auch mit dem DBNavigator nicht einfach alles zur Verfügung stellen, was Delphi anbietet

Du kannst entweder
- über DBNavigator.VisibleButtons Funktionen verbergen. Dann müsstest Du einen zusätzlichen eigenen Button mit der Löschfunktion anbieten. Oder
- (besserer Vorschlag) Du schreibst einen Eventhandler für DBNavigator.BeforeAction. In diesem kannst Du abfragen, welcher Button gedrückt wurde. wenn es der Löschbutton war, dann kannst Du eben das veränderte Verhalten programmieren und mit Abort abbrechen.

Grüße
Urs
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#7

Re: DeleteQuery abbrechen?

  Alt 18. Sep 2003, 02:58
Wenn Deine DB das unterstützt, wäre ein DeleteTrigger die sauberste Lösung, weil der dann auch Deletes von ausserhalb Deines Programmes abfängt (z.B. Datenbankoberfläche oder ISQLW oder QueryAnalyzer)
Tim Leuschner
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz