SQL Trigger mit ADS

Advantage Database Server

Moderator: Moderatoren

Antworten
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

SQL Trigger mit ADS

Beitrag von UliTs »

Hallo,

ich möchte einen Trigger schreiben, der beim Anlegen eines Datensatzes automatisch die nächste Id vergibt. Leider bin ich mit meinen Versuchen gescheitert. :(
Allerdings ist es mir gelungen, im Data Dictionary unter "Functions" (was ist eigentlich der Unterschied zwischen "Functions" und "Stored Procs"?) die folgende Funktion zu schreiben:

Code: Alles auswählen

DECLARE nReturn Integer;
  SET nReturn = 
    ( SELECT LetzteId 
      FROM   IdVerwaltung
      WHERE  IdBez='QSLPId' )+1;
  IF IfNull(nReturn,0)=0 THEN
    INSERT INTO IdVerwaltung(IdBez,LetzteId) VALUES('QSLPId',0 );
    nReturn = 1;
  ENDIF;
  UPDATE IdVerwaltung
     SET LetzteId=LetzteId+1
   WHERE IdBez='QSLPId';  
RETURN nReturn;
Diese muß ich dann allerdings manuell im xBase-Programm benutzen:

Code: Alles auswählen

INSERT INTO QStListePos
            (QSLPId)
VALUES      (QSLPNaechsteId())			
Weiß jemand, wie der zugehörige Trigger aussieht?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: SQL Trigger mit ADS

Beitrag von Jan »

Hallo Uli,

ich arbeite nicht mit ADS und hab davon auch keine Ahnung. Aber zumindest in der FOXDBE kann man ein Sequenze-Feld einbauen, daß automatisch hochzählt. Da ADS (soweit ich weiß :? ) auf die "normalen" dbf aufbaut, kannst Du ja vielleicht das einsetzen?

Und nur keine Hemmungen auf mich einzuprügeln, wenn ich Schrott geschrieben habe :badgrin:

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SQL Trigger mit ADS

Beitrag von UliTs »

Hallo Jan,

wie fügst Du denn mit der FoxDBF einen Trigger in das DataDictionary vom ADS ein? 8)
Natürlich kann man so etwas auch mit dem Datentyp "AutoInc" durchführen, aber genau das möchte ich nicht!

Aber vielleicht gibt es ja noch jemanden, der sich mit Triggern auskennt? :angel3:
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: SQL Trigger mit ADS

Beitrag von Manfred »

Hi Uli, wie sieht es aus, klappt es ?
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!!
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: SQL Trigger mit ADS

Beitrag von Marcus Herz »

Hi
In etwa so, musst nur die <Platzhalter> einsetzen:

CREATE TRIGGER trg_After_Insert_ID
ON <Table>
AFTER
INSERT
BEGIN
update <Table> set <INCFIELD> = ifnull((select max(<INCFIELD>) from <Table>),1)
where <primarykey> = __new.<primarykey>;

END
NO MEMOS
NO TRANSACTION
PRIORITY 1;
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SQL Trigger mit ADS

Beitrag von UliTs »

Manfred hat geschrieben: Di, 26. Mai 2020 10:00 Hi Uli, wie sieht es aus, klappt es ?
Hallo Manfred,
hat ein bisschen gedauert, bis ich kapiert habe, dass Deine Frage sich auf 2008 bezieht :D .
Ja, ich habe diverse Lösungen gefunden, die zu 100% funktionieren :!:

Bei der Lösung von Marcus fehlt sicher noch ein "+1" und bin ich mir nicht sicher, ob sie immer funktioniert (z.B. wenn zeitgleich Datensätze angelegt werden).

Viele Grüße

Uli

P.S. Ich habe leider diese Woche ziemlichen Streß. Kann also immer dauern, bis ich antworte...
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: SQL Trigger mit ADS

Beitrag von Marcus Herz »

Ähh, stimmt, hochzählen ist wichtig ;-)

- Sätze gleichzeitg: Keyword
NO TRANSACTION
am Ende ersatzlos entfernen, dann gibt es kein "Gleichzeitig" mehr
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: SQL Trigger mit ADS

Beitrag von UliTs »

Ja, aber wenn Datensätze gelöscht werden, kann so z.B. eine bereits vergebenen Nummer erneut vergeben werden. Außerdem will man evtl etwas mit der Nummer schon vor dem Insert machen. :-) .
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: SQL Trigger mit ADS

Beitrag von Marcus Herz »

- Wenn du die Nummer schon vorher brauchst, musst du autoinc verwenden. Die ist sofort nach dem Append und vor dem Commit schon verfügbar.
- Nummern 2x verwenden kann ich nicht empfehlen. Es gibt genügend Nummern und ein Schlüssel sollte persistent und immer und ewig einmalig sein.
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Antworten