Trigger erstellen
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
Trigger erstellen
Hi,
ich stelle gerade ein paar Versuche an und komme da nicht so recht weiter. Ich erstelle ein DD mit ADT Tabellen und möchte natürlich direkt auch eine UID automatisch vergeben, wenn ein neuer Satz erfasst wird. Joachims Video vom Treffen in 2016 hilft mir da leider nicht weiter. Wie bekomme ich einen Trigger erstellt, wenn ich alles händisch über den Architekten anlege?
ich stelle gerade ein paar Versuche an und komme da nicht so recht weiter. Ich erstelle ein DD mit ADT Tabellen und möchte natürlich direkt auch eine UID automatisch vergeben, wenn ein neuer Satz erfasst wird. Joachims Video vom Treffen in 2016 hilft mir da leider nicht weiter. Wie bekomme ich einen Trigger erstellt, wenn ich alles händisch über den Architekten anlege?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: Trigger erstellen
am besten über SQL:
ansonsten auf die Tabelle im Dictionary (Architect Database repository) mit der rechten Maustaste --> Triggers.
Code: Alles auswählen
create trigger trig_ins on [meine Tabelle] INSTEAD OF INSERT
begin
UPDATE __new SET [ID Feld]=newid() WHERE [ID Feld] is null;
INSERT INTO [meine Tabelle] SELECT * FROM __new;
end;
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
Re: Trigger erstellen
so habe ich das gemacht.
jetzt kommt folgender Hinweis.
jetzt kommt folgender Hinweis.
Ich kann aber nichts finden, wo er abgelegt sein sollte. Was mache ich falsch?poQuery: Error 7200: AQE Error: State = HY000; NativeError = 5181; [SAP][Advantage SQL Engine][ASA] Error 5181: Trigger creation failed. An INSTEAD OF trigger of this type already exists.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: Trigger erstellen
Im ARC siehst du links im Contextmenü einer Tabelle den Eintrag Triggers, Dort kannst du einFenster öffnen, das alle anzeigt.
- wenn schon ein INSTEAD OF Trigger existiert, kann kein weiterer definiert werden => heisst auch, das script kann nicht 2x ausgeführt werden
- wenn du nur einen Default wert nach dem Insert setzen willst geht das auch einfacher:
Du mausst halt den Tabellennamen KUNDE und das Feld 'guid' anpassen
- wenn schon ein INSTEAD OF Trigger existiert, kann kein weiterer definiert werden => heisst auch, das script kann nicht 2x ausgeführt werden
- wenn du nur einen Default wert nach dem Insert setzen willst geht das auch einfacher:
Code: Alles auswählen
EXECUTE PROCEDURE sp_ModifyFieldProperty ( 'KUNDE',
'guid', 'Field_Default_Value',
'newidstring(''f'')', 'APPEND_FAIL', 'KUNDEfail' );
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Trigger erstellen
Servus Manfred,
unter PG würde ich sagen, Du hast schon ein Feld vom Typ serial (AUTO_INCREMENT) erstellt?
unter PG würde ich sagen, Du hast schon ein Feld vom Typ serial (AUTO_INCREMENT) erstellt?
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: Trigger erstellen
Du könntest das Dictionary abfragen:
Code: Alles auswählen
SELECT * FROM system.triggers
Code: Alles auswählen
SELECT * FROM system.triggers WHERE Trig_TableName LIKE 'meine Tabelle'
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: Trigger erstellen
und dann weiter:
Code: Alles auswählen
TRY
DROP Trigger [meine Tabelle].[mein Trigger];
CATCH ALL
END TRY;
CREATE TRIGGER ...
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
Re: Trigger erstellen
OK,
jetzt sind sie erstmal alle wieder weg.
Es ging aber nur über DROP Trigger (Joachim)
in der Tabelle, rechte Maustaste und dann Triggers, war alles leer. Oder meintet ihr was anderes?
jetzt sind sie erstmal alle wieder weg.
Es ging aber nur über DROP Trigger (Joachim)
in der Tabelle, rechte Maustaste und dann Triggers, war alles leer. Oder meintet ihr was anderes?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: Trigger erstellen
evtl musst du erst ein Refresh des DD ausführen, wenn du mit SQL Trigger erstellst
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Manfred
- Foren-Administrator
- Beiträge: 21225
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 70 Mal
Re: Trigger erstellen
das kann natürlich sein. Daran habe ich nicht gedacht. Jetzt ist er auch zu sehen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Trigger erstellen
Servus Joachim,
könnte man über solche Trigger (insert, update, delete) auch 2 ADS untereinander abgleichen? Also ADS1 hat die 3 Trigger definiert, die dann ADS2 abgleichen, ADS2 hat dieselben 3 Trigger, die den ADS1 abgleichen.
Im jew. Trigger müsste man nur definieren, wenn z. B. der insert vom eigenen ADS kommt, dann nix machen, ansonsten feuern.
Geht sowas?
könnte man über solche Trigger (insert, update, delete) auch 2 ADS untereinander abgleichen? Also ADS1 hat die 3 Trigger definiert, die dann ADS2 abgleichen, ADS2 hat dieselben 3 Trigger, die den ADS1 abgleichen.
Im jew. Trigger müsste man nur definieren, wenn z. B. der insert vom eigenen ADS kommt, dann nix machen, ansonsten feuern.
Geht sowas?
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: Trigger erstellen
Hallo Werner
Das ist eigentlich die Aufgabe von Replikation, Hab ich im Einsatz, funktioniert prima.
oder:
Versuch die 2 ADD zu linken. Im Trigger musst du abfragen, ob sich die relavanten felder geändert haben. Nur dann feuren,. So könntest du endlos Rekursion vermeiden
Das ist eigentlich die Aufgabe von Replikation, Hab ich im Einsatz, funktioniert prima.
oder:
Versuch die 2 ADD zu linken. Im Trigger musst du abfragen, ob sich die relavanten felder geändert haben. Nur dann feuren,. So könntest du endlos Rekursion vermeiden
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Re: Trigger erstellen
Hallo Marcus,
Replikation setzt aber ADT Tabellen voraus - oder?
Gibt es auch eine Chance, wenn DBF/NTX mit dem ADS verwendet wird?
Gruß Udo
Replikation setzt aber ADT Tabellen voraus - oder?
Gibt es auch eine Chance, wenn DBF/NTX mit dem ADS verwendet wird?
Gruß Udo
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: Trigger erstellen
Kann ADT und DBF
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: Trigger erstellen
innerhalb der Trigger kannst Du nur auf demselben Server arbeiten - wenn DB2 auf einem anderen liegt, geht es nicht mehr .... außer Du erstellst den Trigger Code nicht in SQL sondern als Windows DLL, dann kannst Du jegliche non visual Schweinerei veranstalten;)
Replikation geht mit ADT und DBF. Voraussetzung ist die Verwendung eines Data Dictionaries sowie die Verwendung des ADS Servers (local Server geht nicht). Zudem müssen alle Updates über die Dictionary-Verbindung kommen (also nicht mehr im kompatiblen Modus).
Replikation geht mit ADT und DBF. Voraussetzung ist die Verwendung eines Data Dictionaries sowie die Verwendung des ADS Servers (local Server geht nicht). Zudem müssen alle Updates über die Dictionary-Verbindung kommen (also nicht mehr im kompatiblen Modus).
Re: Trigger erstellen
Hallo,
wenn ich das richtig verstehe, liste ich alle DBF Tabellen in einem DataDictionary auf und kann mit einer "Two-Way Replication" zwei ADS - Server (an zwei Unternehmensstandorten / VPN Tunnel) verbinden. An beiden Standorten kann mit dem selben Programm gearbeitet werden. Für auftretende Konflikte könnte ein Conflict-Trigger definiert werden.
Gibt es eine Möglichkeit DBF und NTX Tabellen per Script in das DataDictionry zu schreiben?
Glück Auf!
Udo
wenn ich das richtig verstehe, liste ich alle DBF Tabellen in einem DataDictionary auf und kann mit einer "Two-Way Replication" zwei ADS - Server (an zwei Unternehmensstandorten / VPN Tunnel) verbinden. An beiden Standorten kann mit dem selben Programm gearbeitet werden. Für auftretende Konflikte könnte ein Conflict-Trigger definiert werden.
Gibt es eine Möglichkeit DBF und NTX Tabellen per Script in das DataDictionry zu schreiben?
Glück Auf!
Udo
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: Trigger erstellen
Code: Alles auswählen
execute procedure sp_AddTableToDatabase('symbolname' ,'dateiname.DBF ' , 1, 2, 'dateiindex1.ntx;dateiindex2.ntx', NULL );
Symbolname und Dateiname möglichst gleich benennen, sonst blickt keiner mehr durch (es sei denn du möchst das :-)
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- nightcrawler
- 1000 working lines a day
- Beiträge: 655
- Registriert: Di, 24. Apr 2012 16:33
- Wohnort: 72184 Weitingen
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 96 Mal
- Kontaktdaten:
Re: Trigger erstellen
wichtig: Du musst Deine Verbindung dann auch so umbiegen, dass Du die Connection immer über das Dictionary machst - nur dann kann der ADS auch erkennen, dass sich was geändert hat und den Datensatz in die Queue stecken.