🍀 Das LibreOffice Forum braucht HEUTE Ihre Hilfe! 🍀
❤️ Spenden Sie jetzt und sichern Sie die Zukunft unseres LibreOffice-Forums ❤️
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen lieben Dank!
>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig und kostenlos ihr Wissen teilen.<<
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: 866
- 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
Achte auf die dritte Ziffer: Libre Office 25.2.0.3 = Ärger ist vorprogrammiert.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan
Freischreiber nutzt seit 1/2025 LibreOffice 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
-
F3K Total
- * LO-Experte *
- Beiträge: 2515
- 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: 866
- 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
Achte auf die dritte Ziffer: Libre Office 25.2.0.3 = Ärger ist vorprogrammiert.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan
Freischreiber nutzt seit 1/2025 LibreOffice 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
-
F3K Total
- * LO-Experte *
- Beiträge: 2515
- 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: 866
- 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
Achte auf die dritte Ziffer: Libre Office 25.2.0.3 = Ärger ist vorprogrammiert.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan
Freischreiber nutzt seit 1/2025 LibreOffice 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
-
F3K Total
- * LO-Experte *
- Beiträge: 2515
- 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: 866
- 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
Achte auf die dritte Ziffer: Libre Office 25.2.0.3 = Ärger ist vorprogrammiert.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan
Freischreiber nutzt seit 1/2025 LibreOffice 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
-
F3K Total
- * LO-Experte *
- Beiträge: 2515
- 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: 866
- 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
Achte auf die dritte Ziffer: Libre Office 25.2.0.3 = Ärger ist vorprogrammiert.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan
Freischreiber nutzt seit 1/2025 LibreOffice 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
-
F3K Total
- * LO-Experte *
- Beiträge: 2515
- 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:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das laufende.
Einfach per Kreditkarte oder PayPal. Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️