🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
-
Freischreiber
- * LO-Experte *
- Beiträge: 832
- Registriert: Fr 28. Mär 2014, 10:41
Beitrag
von Freischreiber » So 28. Dez 2014, 15:34
Danke, funktioniert! Ja, HSQL 2.3.2.
Jetzt hab ich gleich probiert, das abzuwandeln, damit auch ein Primärschlüsselfeld ausgefüllt werden kann, aber es scheitert mit "wrong or missing data impact clause in declaration: MODIFIES SQL":
Code: Alles auswählen
CREATE TRIGGER Triggername
BEFORE INSERT ON "t-triggertest"
REFERENCING NEW ROW AS NEWROW
FOR EACH ROW BEGIN ATOMIC
IF NEWROW."zusammen" IS NULL THEN
UPDATE "t-triggertest" SET "zusammen" = NEWROW."Nachname" ||', '||NEWROW."Vorname" WHERE "zusammen" = NEWROW."zusammen";
END IF;
END
Es gibt wohl eine Möglichkeit, ich kriegs aber nicht rein. Die Tabelle existiert halt schon... :
http://stackoverflow.com/questions/2954 ... -in-hsqldb
Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de
-
F3K Total
- * LO-Experte *
- Beiträge: 2501
- Registriert: So 10. Apr 2011, 10:10
Beitrag
von F3K Total » So 28. Dez 2014, 18:30
Hallo,
ich verstehe die Frage nicht.
Bitte erkläre genau was du in welcher, wie definierten Tabelle erreichen willst?
Am besten mit einer Beispieldatei.
R
Windows 11: AOO, LO Linux Mint: AOO, LO
-
Freischreiber
- * LO-Experte *
- Beiträge: 832
- Registriert: Fr 28. Mär 2014, 10:41
Beitrag
von Freischreiber » So 28. Dez 2014, 19:10
Hi,
es ist die Datei aus deinem Beispieltrigger. Wenn ich die "zusammen"-Spalte als Primärschlüssel definiert habe, klappt das Ausfüllen nicht, weil es "after insert" erst einmal leer wäre vor dem Ausfüllen durch den Trigger. Deshalb habe ich es mit "before insert" probiert, was aber so auch nicht geht...
Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de
-
F3K Total
- * LO-Experte *
- Beiträge: 2501
- Registriert: So 10. Apr 2011, 10:10
Beitrag
von F3K Total » Mo 29. Dez 2014, 10:11
Dein Vorhaben kann nicht funktionieren, die Katze beißt sich in den Schwanz!
Ohne PK keine Zeile, ohne Zeile kein PK.
Darum kannst du den PK nicht mit einem Trigger "before insert" zusammensetzen.
Was funktioniert, ist eine generierte Spalte:
Code: Alles auswählen
CREATE CACHED TABLE "Namen"("Nachname" VARCHAR(50),"Vorname" VARCHAR(50),"zusammen" VARCHAR(100) GENERATED ALWAYS AS(("Nachname"||', ')||"Vorname") PRIMARY KEY)
R
Windows 11: AOO, LO Linux Mint: AOO, LO
-
Freischreiber
- * LO-Experte *
- Beiträge: 832
- Registriert: Fr 28. Mär 2014, 10:41
Beitrag
von Freischreiber » Mo 29. Dez 2014, 13:06
Genial! Es funktioniert wirklich!
Das kombinierte Feld wird zwar nicht gleich in der Tabelle angezeigt, aber abfragen kann man es sofort.
Vielen Dank!
Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de
-
F3K Total
- * LO-Experte *
- Beiträge: 2501
- Registriert: So 10. Apr 2011, 10:10
Beitrag
von F3K Total » Mo 29. Dez 2014, 13:15
Heureka!
Hier noch ein goodie:
Gib mal eine PK-Kombination ein, die schon existiert.
Dann erzeuge diesen TRIGGER und mach's nochmal.
Code: Alles auswählen
CREATE TRIGGER ERROR_MESSAGE_PK
BEFORE INSERT ON "Namen2"
REFERENCING NEW ROW AS NEWROW
FOR EACH ROW
BEGIN ATOMIC
DECLARE ERROR_TEXT VARCHAR(100);
DECLARE NCOUNT INTEGER;
SET ERROR_TEXT='Der Primärschlüssel "'||NEWROW."Nachname"||', '||NEWROW."Vorname"||'" existiert bereits';
SET NCOUNT = select Count(*) from "Namen2" where "Nachname" = NEWROW."Nachname" AND "Vorname" = NEWROW."Vorname";
IF NCOUNT > 0 THEN SIGNAL SQLSTATE'45000'
SET MESSAGE_TEXT=ERROR_TEXT;
END IF;
END
R
Windows 11: AOO, LO Linux Mint: AOO, LO
-
Freischreiber
- * LO-Experte *
- Beiträge: 832
- Registriert: Fr 28. Mär 2014, 10:41
Beitrag
von Freischreiber » Mo 29. Dez 2014, 17:28
Danke, aber soviel Komfort ist gar nicht nötig. Mit den Fehlermeldungen aus der Datenbank komme ich inzwischen zurecht... aber beim Probieren sehe ich gerade eine andere: Wenn Vorname oder Nachname leer ist, ist die zusammengesetzte Zeichenkette nach diesen seltsamen Konkatenierungsregeln auch Null, und kann nicht in das Primärfeld eingefügt werden. Dann besser irgendwas mit IFNULL?
...GENERATED ALWAYS AS(IFNULL("Nachname"||', ', '')|| (IFNULL("Vorname", '')) PRIMARY KEY)
Danke
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de
-
F3K Total
- * LO-Experte *
- Beiträge: 2501
- Registriert: So 10. Apr 2011, 10:10
Beitrag
von F3K Total » Mo 29. Dez 2014, 17:32
Windows 11: AOO, LO Linux Mint: AOO, LO
-
Freischreiber
- * LO-Experte *
- Beiträge: 832
- Registriert: Fr 28. Mär 2014, 10:41
Beitrag
von Freischreiber » Sa 3. Jan 2015, 09:21
So, oder?
Code: Alles auswählen
...GENERATED ALWAYS AS (COALESCE(("Nachname"||', '),'') || (COALESCE("Vorname", '')) PRIMARY KEY)
Gutes Neues Jahr
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de
-
F3K Total
- * LO-Experte *
- Beiträge: 2501
- Registriert: So 10. Apr 2011, 10:10
Beitrag
von F3K Total » Sa 3. Jan 2015, 12:15
Wenn der Nachname immer vorhanden ist, würde ich das Komma an den Vornamen hängen:
Code: Alles auswählen
CREATE CACHED TABLE "Namen"("Nachname" VARCHAR(50),"Vorname" VARCHAR(50),"zusammen" VARCHAR(100) GENERATED ALWAYS AS("Nachname"||COALESCE(', '||"Vorname",'')) PRIMARY KEY)
R
Windows 11: AOO, LO Linux Mint: AOO, LO
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.