Beitrag
von Textmetz » So 3. Apr 2022, 18:48
Hallo in die Runde.
Da es im Einzelfall nervig sein kann, wenn Firebird Tabellenspalten in LibreOffice Base zurzeit nicht umpositioniert werden können, habe ich mich zu einer Ergänzung dieses Themas, obwohl es auf "GELÖST" gesetzt wurde, entschlossen. Bei mir, unter Linux, tritt dieses Problem ebenso auf.
Also, ich hoffe da auf Euer Verständnis.
***
Firebird benutzt für das Ändern der Positionen von Tabellen-Spalten die POSITION-Klausel.
Das Schlüsselwort POSITION ändert die Position einer vorhandenen Spalte im fiktiven "von links nach rechts"-Layout des Datensatzes. Die Nummerierung der Spaltenpositionen beginnt bei 1.
Wenn eine Position kleiner als 1 angegeben wird, wird eine Fehlermeldung zurückgegeben.
Ein einfaches Beispiel:
Die Ausgangslage.
DB-Tabelle: "Anschrift"
Spalten-Reihenfolge: "Id" - "Name" - "Strasse" - "Anrede" - "Vorname" - "Ort" - "Land" - "Plz"
Ordentliche-Positionen beim Create-Table: 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8
Das Ziel der Änderung.
Spalten-Reihenfolge: "Id" - "Anrede" - "Vorname" - "Name" - "Strasse" - "Ort" - "Plz" - "Land"
Zum besseren Verständnis zwei Herangehensweisen, um das Änderungsziel zu erreichen.
"Fleißiges Lieschen" (also die kplt. Tabelle "Anschrift"):
ALTER TABLE "Anschrift" ALTER "Id" POSITION 1,
ALTER "Anrede" POSITION 2,
ALTER "Vorname" POSITION 3,
ALTER "Name" POSITION 4,
ALTER "Strasse" POSITION 5,
ALTER "Ort" POSITION 6,
ALTER "Plz" POSITION 7,
ALTER "Land" POSITION 8;
O d e r
"Ruckzuck":
ALTER TABLE "Anschrift" ALTER "Anrede" POSITION 2,
ALTER "Vorname" POSITION 3,
ALTER "Plz" POSITION 7;
In beiden Fällen findet die Positionsfindung von links nach rechts (1 -> 8 bzw. 2 -> 7) statt.
Die Änderung ist sofort auf der LO Base-Oberfläche sichtbar. Bspw. über "Ansicht" - "Vorschau" - Umschalten von "Keine" auf "Dokument".
Soll die Änderung dauerhaft sein, muss sie gespeichert werden. Bspw. über "Datei" - "Speichern".
Um die geänderte Positionsfolge der Spalten auch im sog. Tabellenentwurf (Menü "Bearbeiten" - "Bearbeiten") zu sehen, muss die Tabelle (hier: "Anschrift") noch aktualisiert werden. Menü "Ansicht" - "Tabellen aktualisieren".
Alles wieder auf die Ausgangslage bringen:
ALTER TABLE "Anschrift" ALTER "Plz" POSITION 8,
ALTER "Vorname" POSITION 5,
ALTER "Anrede" POSITION 4,
ALTER "Strasse" POSITION 3,
ALTER "Name" POSITION 2;
Spalten-Reihenfolge: "Id" - "Name" - "Strasse" - "Anrede" - "Vorname" - "Ort" - "Land" - "Plz"
***
Für Alter TABLE ADD "Neue_Felder" ... funktioniert das analog.
ALTER TABLE "Anschrift" ADD "Feld1" VARCHAR(25),
ADD "Feld2" VARCHAR(25);
Spalten-Reihenfolge: "Id" - "Name" - "Strasse" - "Anrede" - "Vorname" - "Ort" - "Land" - "Plz" - Feld1 - Feld2
Man kann im nächsten Schritt darangehen, die beiden hinzugefügten Felder (Feld1 und Feld2) wie benötigt zu positionieren.
Bei EXECUTE BLOCK funktioniert es nicht.
execute block as
begin
ALTER TABLE "Anschrift" ALTER "Anrede" POSITION 8,
ALTER "Vorname" POSITION 7,
ALTER "Plz" POSITION 6;
end
Für multiples INSERT INTO Anschrift sieht es auch mau aus.
Hoffe die Infos helfen etwas über die Zeit, bis das Problem von den Entwicklern geklärt werden kann.
Die von mir beschriebene Vorgehensweise ist nicht dokumentiert. Verwendung auf eigene Gefahr.
Viele Grüße
Textmetz
LibreOffice 7.3.7.2 Linux Mint 21.3 Cinnamon v6.0.4