![]() |
Datenbank: Firbird • Version: 3 • Zugriff über: Seattle 10
Trigger -> Änderung in einem DBGrid
Hallo,
für alle Tabellen unserer Datenbank gibt es Felder wie:
Code:
Nun habe ich für diese Felder Trigger eingerichtet die dafür sorgen, dass die entsprechenden Felder je nach Situation angepasst werden.
"Created" TIMESTAMP NOT NULL,
"Modified" TIMESTAMP NOT NULL, "CreatedBy" SMALLINT NOT NULL, "ModifiedBy" SMALLINT NOT NULL, Hier die Trigger:
Delphi-Quellcode:
Das funktioniert auch prinzipiell. Aber wenn ich nun in einem TDBGrid, das an einem TFDQuery/TDataSource hängt (was an einem TFDConnection hängt), einen Datensatz ändere, zum nächsten springe, dann wird im Grid die Änderung des "Modified" nicht sofort angezeigt, erst wenn man z. B. die Abfrage erneuert. Auf den zweiten Blick ist mir das sogar klar, das das so ist. Aber erwartet hatte ich was anderes, nämlich das im Grid sofort die Änderung zu sehen ist, wenn man was geändert hat und zu einem anderen Datensatz springt.
/* Trigger für Defaultwerte von Created, Modified, CreatedBy und ModifiedBy */
SET TERM ^; CREATE OR ALTER TRIGGER TR_TA_TimeTableList_Created_BI FOR TA_TimeTableList ACTIVE BEFORE INSERT AS BEGIN IF (NEW."Created" IS NULL) THEN NEW."Created" = CURRENT_TIMESTAMP; IF (NEW."Modified" IS NULL) THEN NEW."Modified" = CURRENT_TIMESTAMP; IF (NEW."CreatedBy" IS NULL) THEN NEW."CreatedBy" = 0; IF (NEW."ModifiedBy" IS NULL) THEN NEW."ModifiedBy" = 0; END ^ /* Trigger für Aktualisierung von Modified und ModifiedBy */ CREATE OR ALTER TRIGGER TR_TA_TimeTableList_Modified_BU FOR TA_TimeTableList ACTIVE BEFORE UPDATE AS BEGIN NEW."Modified" = CURRENT_TIMESTAMP; NEW."ModifiedBy" = 0; END ^ SET TERM ;^ Wo und wie ist hier der Hebel anzusetzen, dass durch Trigger veränderte Werte in einem Grid angezeigt werden? TIA, Markus |
AW: Trigger -> Änderung in einem DBGrid
Du musst die Daten neu laden. Da führt kein Weg dran vorbei.
Eine Hilfe dabei kann POST_EVENT sein. |
AW: Trigger -> Änderung in einem DBGrid
Um die eigenen Änderungen zu sehen, reicht IMHO ein RefreshRecord nach dem Post.
Manche Komponenten haben auch ein Property, wo man das Verhalten steuern kann, ich kenne aber FDQuery nicht. |
AW: Trigger -> Änderung in einem DBGrid
Hallo,
das ist pure Absicht, du siehst immer die Daten der aktuellen Transaktion (vor den Trigger-Updates). siehe auch hier ![]() Heiko |
AW: Trigger -> Änderung in einem DBGrid
Zitat:
|
AW: Trigger -> Änderung in einem DBGrid
Hallo,#
ach so, ich dachte, es geht um ein Mehrbenutzer-System. Heiko |
AW: Trigger -> Änderung in einem DBGrid
Es gibt einige Zugriffskomponenten, die bieten direkt eine RefreshAfterPost-Option an, wo sie automatisch ein RefreshRecord nach einem Post ausführen.
Refresh = alle Datensätze / RefreshRecord nur der aktuelle Datensatz (dafür wird meißt das WHERE erweitert, um die DatensatzID) ... kommt dann drauf an, wie weit Triger die Daten ändern können und ob es sich auch auf andere Datensätze auswirken kann. Der Insert-Trigger wäre nicht unbedingt nötig, denn dafür kann man die Default-Werte doch bestimmt auch direkt in der Tabelle definieren.
SQL-Code:
Aber warum wird Modified schon beim Insert gesetzt, wo es da doch noch garnicht editiert sein kann? :zwinker:
"Created" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
"Modified" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, "CreatedBy" SMALLINT NOT NULL DEFAULT 0, -- CURRENT_USER? "ModifiedBy" SMALLINT NOT NULL DEFAULT 0, Na dann hoffe ich mal, dass dein Programm im Laufe seines Lebens nicht mehr als 32.767 User kennt :angle: |
AW: Trigger -> Änderung in einem DBGrid
Zitat:
Gruß K-H |
AW: Trigger -> Änderung in einem DBGrid
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
TIA, Markus |
AW: Trigger -> Änderung in einem DBGrid
Zitat:
Gruß, Markus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 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 by Thomas Breitkreuz