🙏 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!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Tabellenformat in Spalten nachträglich ändern

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Rentner Heinz
Beiträge: 23
Registriert: Mi 9. Jul 2014, 16:10

Tabellenformat in Spalten nachträglich ändern

Beitrag von Rentner Heinz » Mi 9. Jul 2014, 16:34

Hallo Forum,

ich habe eine id-Tabellenspalte als Bezug zu einer anderen Tabelle versehentlich als 'Text (VARCHAR) formatiert und damit längere Zeit gearbeitet.

Um Beziehungen bzw. Abfragen zu generieren, muss das Spaltenformat aber 'INTEGER' sein. Dass möchte ich unter Beibehaltung der vorhandenen Daten
gern ändern.
Bekanntlich geht das nicht so einfach, die Meldung nach Änderung lautet: Die xxx-Spalte konnte nicht geändert werden. Soll sie statt dessen gelöscht
und an das neue Format angehängt werden?
Dann sind aber auch alle in dieser Spalte schon vorhandenen Daten verloren.
Gibt es dafür eine Lösung, mit kopieren/anhängen bin ich leider auch gescheitert.

Rentner Heinz

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Tabellenformat in Spalten nachträglich ändern

Beitrag von F3K Total » Mi 9. Jul 2014, 21:19

Hallo Heinz,
Rentner Heinz hat geschrieben:Gibt es dafür eine Lösung, mit kopieren/anhängen bin ich leider auch gescheitert.
Ja, gibt es, wenn du die eingebettete HSQL Datenbank verwendest, mit Firebird kenne ich mich nicht so aus.
Angenommen die VARCHAR -Spalte heißt ID und die betroffene Tabelle ist Tabelle1
Wenn in der Spalte ID keine Zahl doppelt vorkommt, dann führst du unter Extras/SQL ... diese Befehle in einem Rutsch aus:

Code: Alles auswählen

ALTER TABLE "Tabelle1" ADD "ID_NEU" INTEGER BEFORE "ID";
UPDATE "Tabelle1" SET "ID_NEU" = CAST ("ID" AS INTEGER);
ALTER TABLE "Tabelle1" DROP "ID";
ALTER TABLE "Tabelle1" ALTER "ID_NEU" RENAME  TO "ID";
ALTER TABLE "Tabelle1" ALTER "ID" SET NOT NULL;
ALTER TABLE "Tabelle1" ADD PRIMARY KEY ("ID");
ALTER TABLE "Tabelle1" ALTER "ID" INTEGER GENERATED BY DEFAULT AS IDENTITY;
Nun Tabellen/Ansicht/Tabellen aktualisieren.
Fertig. Jetzt hast du eine Autowert-Integer ID.
Anbei eine Beispieldatei, die momentan noch eine VARCHAR ID hat, an der du die Befehle ausprobieren kannst.
Viel Erfolg
Gruß R
Dateianhänge
Spalte_nachtraeglich_aendern .zip
nur entpacken
(19.61 KiB) 415-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

Rentner Heinz
Beiträge: 23
Registriert: Mi 9. Jul 2014, 16:10

Re: Tabellenformat in Spalten nachträglich ändern

Beitrag von Rentner Heinz » Do 10. Jul 2014, 21:46

Guten Abend F3K Total,

das haut noch nicht genau hin, ich nutze die eingebaute HSQL, aber
die zu änderne Spalte soll in eine n:1 Beziehung, enthält also
viele Doppelungen.
Aber schon einmal vielen Dank für Deine Antwort.

Rentner Heinz

Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

Re: Tabellenformat in Spalten nachträglich ändern

Beitrag von Acco » Fr 11. Jul 2014, 00:48

Hallo Heinz,

ich blicke noch nicht ganz durch, ist es so:

Die zu ändernde Spalte "ID" (Text) ist nicht der Primärschlüssel der Tabelle (bei doppelten Einträgen geht das ja nicht),sondern die n-Seite einer Beziehung. Primärschlüssel ist eine andere Spalte dieser Tabelle. In der anderen Tabelle ist die "ID" Integer. Somit kannst Du keine Beziehung definieren unter EXTRAS - Beziehungen, weil dann eine Fehlermeldung, Datentypen unverträglich, kommt?

In LO 4.1.6.2 unter openSUSE 13.1 brauche ich in der Tabelle_n nur den Datentyp der Spalte von Text zu Integer ändern (habe es eben mehrfach ausprobiert) und alle Werte, auch die doppelten, bleiben erhalten so wie sie sind. Falls doch irgendwie in EXTRAS - Beziehungen ein entsprechender Eintrag ist, lösche ihn und trage ihn nach der Änderung wieder ein.

Die entsprechend veränderte Beispiel-DB von F3K Total hänge ich an, Tabelle_1 liefert die "ID" (Integer) die zu verändernde Spalte "ID" ist in Tabelle_n. Die kann ich in Integer ändern und alle Werte bleiben erhalten. Abfrage1 zeigt die Ergebnisse. Probiers mal aus.

Wenn es das nicht war, wäre eine Beispiel-DB nett.

Gruß acco
Dateianhänge
Spalte_nachtraeglich_aendern_1.zip
Datei entpacken
(26.49 KiB) 404-mal heruntergeladen
openSUSE Tumbleweed - LibreOffice 24.8.2.1

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Tabellenformat in Spalten nachträglich ändern

Beitrag von F3K Total » Fr 11. Jul 2014, 15:43

Na, oder du läßt der Primäschlüssel-Autowert-Teil der SQL-Befehle einfach weg:

Code: Alles auswählen

ALTER TABLE "Tabelle1" ADD "ID_NEU" INTEGER BEFORE "ID";
UPDATE "Tabelle1" SET "ID_NEU" = CAST ("ID" AS INTEGER);
ALTER TABLE "Tabelle1" DROP "ID";
ALTER TABLE "Tabelle1" ALTER "ID_NEU" RENAME  TO "ID";
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Rentner Heinz
Beiträge: 23
Registriert: Mi 9. Jul 2014, 16:10

Re: Tabellenformat in Spalten nachträglich ändern

Beitrag von Rentner Heinz » Mi 6. Aug 2014, 22:25

Hallo F3K Total,

nachdem ich den SQL-Befehl ohne Bezug auf den Primärschlüssel-Autowert eingegeben habe, bekomme ich
folgende Meldung:
>Wrong data typ:java.lang.NumberFormatExeption: For input string:"Haushalt"

Bei "Haushalt" handelt es sich um den Namen der Datenbank.
Die Tabelle heißt "HH-Buchungen" und die zu ändernde Spalte heißt "KtoID".

Kannst Du mir bitte noch einmal helfen?

Gruß
Rentner Heinz

Rentner Heinz
Beiträge: 23
Registriert: Mi 9. Jul 2014, 16:10

Re: Tabellenformat in Spalten nachträglich ändern

Beitrag von Rentner Heinz » Mi 6. Aug 2014, 22:50

Noch einmal Hallo F3K,

eine weitere Meldung nach dem SQL lautet wie folgt:

2: Column already exists: KtoID_Neu in statement [ALTER TABLE "HH_Buchungen" ADD "KtoID_Neu" INTEGER ]

Was mache ich nicht richtig?

Gruß
Rentner Heinz

Rentner Heinz
Beiträge: 23
Registriert: Mi 9. Jul 2014, 16:10

Re: Tabellenformat in Spalten nachträglich ändern

Beitrag von Rentner Heinz » Mi 6. Aug 2014, 23:07

... und nun noch zum dritten ...

es wird zwar eine neue Spalte als "KtoID_Neu" in die Tabelle eingefügt und auch mit Format 'Integer',
aber die Spalte bleibt leer und an der Orginal-Spalte ändert sich auch nichts.

So, für heute ist Schluss.
Gruss Rentner Heinz

Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

Re: Tabellenformat in Spalten nachträglich ändern

Beitrag von Acco » Fr 8. Aug 2014, 09:27

Hallo Heinz,

poste doch mal den genauen Code, oder eine Beispiel_DB. Irgendwo hast Du anscheinend den Datenbanknamen statt des Tabellennamens eingegeben.

Gruß acco
openSUSE Tumbleweed - LibreOffice 24.8.2.1

Rentner Heinz
Beiträge: 23
Registriert: Mi 9. Jul 2014, 16:10

Re: Tabellenformat in Spalten nachträglich ändern

Beitrag von Rentner Heinz » Di 12. Aug 2014, 19:41

Hallo Acco, hallo F3K Total,

nachdem ich in meiner Tabelle nach langem Suchen einige falsch formatierte
Einträge gefunden und bereinigt habe, hat der Code von F3K Total genau
gepaßt; und zwar der ohne den Primärschlüssel-Autowert.

Tut mir leid, dass ich erst einige Verwirrung gestiftet habe, aber so
sind Rentner ja wohl manchmal.
Jungs, Ihr habt mir riesig geholfen. Danke!

Rentner Heiz


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.



Antworten