Huhu,
Also ich habe folgende Aufgabe :
Ich habe eine Tabelle Adressen wo ich pro User Adressen Speichern und verwalten kann.
Es sollen mehrere User den gleichen Adressstamm nutzen möchten.
Bsp.: User 1,2,3.
Wenn jetzt der User1 eine Adresse anlegt
AdressNr = 1,
Name1 = 'aaaa'
Vorname = 'bbbbb'.....
soll automatisch auf User2 und User3 die gleiche Adresse mit gleicher Adressnr,Vorname,name1..... angelegt werden.
So bis hierher kein Problem.
Wenn jetzt der User2 Name1 ändert, soll auch Automatisch der Name1 auf den User1 und User3 geändert werden.
Jetzt die Interessante Frage wie kann man sowas realisieren
Ich hatte 2 grundsätzliche Überlegungen :
1. in Echtzeit über einen After Update Trigger like
Code:
if (Old.Name1 <> New.Name1) then Update Adressen set Name1 = New.Name1 where AdressNr = New.AdressNr and ID <> New.ID;
if (Old.Name2 <> New.Name2) then Update Adressen set Name2 = New.Name2 where AdressNr = New.AdressNr and ID <> New.ID;
Das Problem ist, das die Tabelle aus ca. 100 Feldern besteht die alle überwacht werden sollen.
Wenn ich den Trigger über den Beschriebenen weg aufbaue wir der Trigger Riesig und unüberwachbar und vor allem nicht pflegbar.
Denn wenn jetzt ein neues Feld hinzu kommt muss ich daran denken es in diesen Trigger mit einzupflegen.
Meine 2.Überlegung wäre eine Gleichschaltung ca alle 5 min.
Dafür müsste ich mir aber irgendwie speichern, welches Feld auf welchem User jetzt aktuell ist.
Was an sich ja über eine Tabelle sehr einfach zu realisieren wäre.
das Problem ist, der Trigger auch wieder so aussehen würde.
Code:
if (Old.Name1 <> New.Name1) then execute procedure SetzeAenderunfskKZ('Name1',New.Zaehler);
if (Old.Name2 <> New.Name2) then execute procedure SetzeAenderunfskKZ('Name2',New.Zaehler);
....
nur hier bin ich wieder an gleich Problem wie oben
gibt es eine Möglichkeit einen Trigger nach folgendem Muster aufzubauen.
Code:
declare variable FLDName VarChar(25);
begin
For
Select RF.RDB$Field_Name
from RDB$Relation_FIelds RF
where Upper(RF.RDB$Relation_Name) = 'ADRESSEN'
into :FLDName
do
Begin
if (Old.FLDName <> New.FLDName) then execute procedure SetzeAenderunfskKZ(:FLDName,New.Zaehler);
end
end
nur geht sowas überhabt?
Bzw. wie würdet ihr dieses Problem angehen?
mfg Jens