AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Trigger verhindet löschen eines Datensatzes
Thema durchsuchen
Ansicht
Themen-Optionen

Trigger verhindet löschen eines Datensatzes

Ein Thema von VizeTE · begonnen am 30. Sep 2005 · letzter Beitrag vom 5. Okt 2005
Antwort Antwort
Seite 2 von 3     12 3      
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#11

Re: Trigger verhindet löschen eines Datensatzes

  Alt 1. Okt 2005, 20:03
mmm...es ist leider nicht meine Entscheidung welche Datenbank eingesetzt wird also werde ich wohl noch eine Weile an IB4 festhalten (müssen).
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Trigger verhindet löschen eines Datensatzes

  Alt 1. Okt 2005, 20:06
Dann pack den Code zum Datum einfügen in das BeforePost-Event der BDE-Komponente, dann brauchst du keinen Trigger. Ist nicht ganz sauber, aber probier das mal.

André
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#13

Re: Trigger verhindet löschen eines Datensatzes

  Alt 4. Okt 2005, 17:38
Zitat von MagicAndre1981:
Dann pack den Code zum Datum einfügen in das BeforePost-Event der BDE-Komponente, dann brauchst du keinen Trigger. Ist nicht ganz sauber, aber probier das mal.
Theoretisch sollte das gehen aber das ist leider auch noch nicht was ich suche da ich gern die Serverzeit in dem Datumsfeld hätte und nicht die Zeit auf dem Client.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#14

Re: Trigger verhindet löschen eines Datensatzes

  Alt 4. Okt 2005, 17:47
Zitat von Hansa:
Siehe dieses Beispiel hier. Beim Erstellen der Tabelle kann ich doch noch nicht wissen, daß ich in 1 Stunde um 20:19:55,4 einen neuen Datensatz anlege ! Der Trigger überwacht das ganze deshalb und merkt sich, daß da die Zeit festgehalten werden muß, auch wenn ichs vergesse. 8)
Jetzt versteh ich erst was du damit meintest. Hab mich vielleicht schlecht ausgedrückt. Aber du kannst auch als default Wert das aktuelle Datum nehmen, zumindest unter dem MSSQL Server kein Problem:
SQL-Code:
create table Daten (
ID int,
Datum datetime null default getdate())
go
Muss Dir jetzt nur noch die Funktion aus dem IB holen, die dir das aktuelle Datum liefert.
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#15

Re: Trigger verhindet löschen eines Datensatzes

  Alt 4. Okt 2005, 17:50
Zitat von Jelly:
Aber du kannst auch als default Wert das aktuelle Datum nehmen, zumindest unter dem MSSQL Server kein Problem
Ich bezweifle, dass das Interbase kann. Aber selbst wenn benötige ich diese Funktion ja auch nach dem ändern des DS. Da hilft der default-Wert leider nicht weiter.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16

Re: Trigger verhindet löschen eines Datensatzes

  Alt 4. Okt 2005, 18:18
@Viez, bist du immer noch dran die DB zu zerhackstückeln ?

SQL-Code:
/******************************************************************************/
/****              Generated by IBExpert 04.10.2005 18:10:28               ****/
/******************************************************************************/

SET SQL DIALECT 3;

SET NAMES ISO8859_1;

SET TERM ^ ;

CREATE TRIGGER TABLE1_AUO FOR TABLE1
ACTIVE AFTER UPDATE POSITION 0
as
begin
  update TABLE1 set
    LETZTEAENDERUNG = current_timestamp
  where (ID = old.ID) and ((LETZTEAENDERUNG is null) or
        (LETZTEAENDERUNG <> current_timestamp));
end
^

SET TERM ; ^
Der Trigger protokolliert sekundengenau, wann zuletzt an der DB an diesem einen betroffenen Datensatz etwas geändert wurde. Es wäre ein leichtes, dabei noch festzuhalten welcher User es war usw. Wo liegt das Problem ? Natürlich kann man das nicht schon beim Erzeugen der Table machen und deshalb sind die Default-Werte fehl am Platze.
Gruß
Hansa
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#17

Re: Trigger verhindet löschen eines Datensatzes

  Alt 5. Okt 2005, 10:36
Zitat von Hansa:
Der Trigger protokolliert sekundengenau, wann zuletzt an der DB an diesem einen betroffenen Datensatz etwas geändert wurde. Es wäre ein leichtes, dabei noch festzuhalten welcher User es war usw. Wo liegt das Problem ?
Das funktioniert prinzipiell, ja. Das Problem liegt aber darin wenn ich diesen DS, nachdem "Post" aufgerufen wurde, nochmal ändere. Dann bekomme ich folgende Fehlermeldung: (wie Eingangs beschrieben)

Datensatz kann nicht gesperrt werden, da der Datensatz von einen anderen Benutzter geändert wurde.
(EDBEngineError)


Die einzige Erklärung die ich mir denken kann ist, daß der Trigger als ein anderer User läuft. Aber so richtig kann ich das auch nicht glauben. Wenn ich ein Rollback mache weiß die DB ja auch welche Trigger dazugehören.
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#18

Re: Trigger verhindet löschen eines Datensatzes

  Alt 5. Okt 2005, 11:44
Das Problem ist doch einfach, dass die BDE vor dem löschen nochmal nachschaut, ob sich der Datensatz inzwischen geändert hat. Und da der Trigger den Datensatz nochmal geändert hat meint die BDE eben es war noch ein anderer Benutzer an dem Datensatz dran.

Du kannst jetzt folgendes machen:

1. in deiner TTable oder TQuery den UpdateMode auf upWhereKeyOnly setzen (vorausgesetzt du hast einen Primary Key)

2. nach dem Insert/Update des Datensatzes gleich einen Refresh auf diesen Datensatz machen, das wäre eh die bessere Lösung, dann siehst du die vom Trigger generierten Werte auch gleich auf dem Client

Danach dürfte dem Löschen nix mehr im Weg stehen.

Gruß
Daniel
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#19

Re: Trigger verhindet löschen eines Datensatzes

  Alt 5. Okt 2005, 12:20
Hallo dfried.

Die erste Lösung funktioniert schon mal. Danke.
Wenn ich den Update-Modus "upWhereKeyOnly" verwende muß ich dann noch irgendwas beachten? Soweit ich die Hilfe verstande habe bekomme ich keine Probleme solange ich den Key nicht ändere. Gibts da noch mehr Stolpersteine?

Die zweite Lösung scheint mir aber auch vernünftiger. Ich verwende ein TQuery. Wie kann ich da einen Primary Key verwenden? Die zu Grunde liegende Tabelle besitzt einen Primary Key aber wie ich den in die Abfrage bekomme weiß nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#20

Re: Trigger verhindet löschen eines Datensatzes

  Alt 5. Okt 2005, 12:23
Zitat von VizeTE:
Die zweite Lösung scheint mir aber auch vernünftiger. Ich verwende ein TQuery. Wie kann ich da einen Primary Key verwenden? Die zu Grunde liegende Tabelle besitzt einen Primary Key aber wie ich den in die Abfrage bekomme weiß nicht.
Was hat dein Primary Key mit Delphi zu tun Ich versteh dein Problem nicht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 11:02 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