BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst] Firebird Tabellenänderung, Extras/SQL

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
malt14
Beiträge: 119
Registriert: Fr 7. Nov 2014, 06:21

[gelöst] Firebird Tabellenänderung, Extras/SQL

Beitrag von malt14 » Di 29. Mär 2022, 18:02

Guten Tag,

wenn ich in einer Firebird Tabelle die Position ändere

Code: Alles auswählen

ALTER TABLE table_name ALTER field_name POSITION new_position; 
Base_Gesamtband_einseitig_V72.pdf S. 134; http://www.firebirdfaq.org/faq185/

wird die Änderung in der Entwurfsansicht erst nach Speichern und Schließen der Datenbank sowie neuem Laden angezeigt.

In Extras/SQL kann ich jeweils nur einen Befehl ausführen. Mehrere Befehle

Code: Alles auswählen

ALTER TABLE table_name ALTER field_name POSITION 1 
ALTER TABLE table_name ALTER field_name2 POSITION 2
ALTER TABLE table_name ALTER field_name3 POSITION 3
oder

Code: Alles auswählen

ALTER TABLE table_name ALTER field_name POSITION 1;
ALTER TABLE table_name ALTER field_name2 POSITION 2;
ALTER TABLE table_name ALTER field_name3 POSITION 3
oder

Code: Alles auswählen

ALTER TABLE table_name ALTER field_name POSITION 1,
ALTER TABLE table_name ALTER field_name2 POSITION 2,
ALTER TABLE table_name ALTER field_name3 POSITION 3
bewirken die Fehlermeldung

Code: Alles auswählen

*Token unknown - line 2, column 1
*ALTER
caused by
'isc_dsql_prepare'
Bei HSQLDB sind mehrere Befehle in Extras/SQL möglich?

Grüße
Malt

Version: 7.2.6.2 (x64) / LibreOffice Community
Build ID: b0ec3a565991f7569a5a7f5d24fed7f52653d754
CPU threads: 6; OS: Windows 10.0 Build 22000; UI render: Skia/Raster; VCL: win
Locale: de-DE (de_DE); UI: de-DE
Calc: CL
Zuletzt geändert von malt14 am Mi 30. Mär 2022, 14:31, insgesamt 1-mal geändert.

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Firebird Tabellenänderung, Extras/SQL

Beitrag von RobertG » Di 29. Mär 2022, 18:34

Hallo Malt,

alles, was Du über Extras → SQL erledigst, solltest Du anschließend mit Ansicht → Tabellen aktualisieren auch für die GUI sichtbar machen.

Der Terminator ';' scheint in der direkten SQL-Eingabe nicht zu funktionieren. Vermutlich beisst sich das mit der Erstellung von Triggern, bei denen innerhalb des Triggers ein Semikolon möglich ist. Der Terminator ';' funktioniert genauso wenig beim Einfügen von mehreren Datensätzen über Extras → SQL.

Du könntest dazu eine Bugmeldung schreiben. Nur ist das Verhalten genauso, wenn ich mit einem Firebird Server über JDBC eine Verbindung aufbaue. Liegt also wohl nicht an dem internen Treiber.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 119
Registriert: Fr 7. Nov 2014, 06:21

Re: Firebird Tabellenänderung, Extras/SQL

Beitrag von malt14 » Mi 30. Mär 2022, 14:30

Hallo Robert,

Dank für die hilfreichen Hinweise.

Von HSQLDB war ich die Eingabe von mehreren Befehlen in SQL direkt gewöhnt.

Bugmeldung Firebird, entering several SQL commands directly together
https://bugs.documentfoundation.org/sho ... ?id=148266

Grüße
Malt

Textmetz
Beiträge: 16
Registriert: Mo 30. Nov 2020, 19:52

Re: [gelöst] Firebird Tabellenänderung, Extras/SQL

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

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: [gelöst] Firebird Tabellenänderung, Extras/SQL

Beitrag von RobertG » So 3. Apr 2022, 21:50

Hallo Textmetz,

Beiträger, die eher einer Ergänzung zu einem Bug entsprechen, passen eigentlich nicht in diese Forum, das mit LibreOffice.org nichts zu tun hat. Hier lesen nur Leute mit, die selbst Nutzer sind. Leute, die auch mit der Entwicklung zu tun haben, erwischt Du besser, wenn Du über LibreOffice nach Foren oder Mailinglisten suchst.

Trotzdem einen Kommentar:
In Firebird ist es natürlich möglich, die Reihenfolge der Spalten zu verändern. Du beschreibst es ja selbst. Die bessere Variante ist für mich, sich über eine Spaltenreihenfolge vorher Gedanken zu machen.
Die Benutzeroberfläche von Base ist eine Oberfläche, die sich seit dem Start von LibreOffice nicht viel geändert hat. Bei der HSQLDB kannst Du nur eine neu angelegte Spalte per SQL an die gewünschte Position schieben. Da haben sich die Entwickler vermutlich gedacht: "Warum das Ganze hin und her. Soll der Nutzer/die Nutzerin zum Sortieren doch einfach aus der alten Tabelle eine Neue machen. Dann ist das Sortieren jederzeit möglich - unabhängig von der Datenbank, die da angesprochen wird."

Noch ein Hinweis zu EXECUTE BLOCK. Ich habe das nur mit dem Insert probiert. Der läuft da einwandfrei bei mehreren Befehlen hintereinander ab, wenn der Trenner ein Semikolon ist.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 119
Registriert: Fr 7. Nov 2014, 06:21

Re: [gelöst] Firebird Tabellenänderung, Extras/SQL

Beitrag von malt14 » Mo 4. Apr 2022, 12:30

Guten Tag,

"execute block" funktioniert bei mir nicht:
in Extras/SQL:

execute block as
begin
ALTER TABLE "0base" ALTER "eL1" POSITION 1;
ALTER TABLE "0base" ALTER "eL2" POSITION 2;
ALTER TABLE "0base" ALTER "eL3" POSITION 3;
end

Meldung:

1: firebird_sdbc error:
*Dynamic SQL Error
*SQL error code = -104
*Token unknown - line 3, column 3
*ALTER
caused by
'isc_dsql_prepare'

Die SQL Befehle funktionieren, wenn diese einzeln eingegeben werden.

Grüße
Malt

Version: 7.2.6.2 (x64) / LibreOffice Community
Build ID: b0ec3a565991f7569a5a7f5d24fed7f52653d754
OS: Windows 10.0 Build 22000;

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: [gelöst] Firebird Tabellenänderung, Extras/SQL

Beitrag von RobertG » Mo 4. Apr 2022, 15:48

Stimmt, mit der Anweisung "ALTER" beginnen da die Probleme. "INSERT" tut es aber hier.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten