🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
[gelöst} SQL Index Neugenerierung mit Startwert ?
-
- * LO-Experte *
- Beiträge: 3041
- Registriert: Mo 12. Nov 2012, 16:59
[gelöst} SQL Index Neugenerierung mit Startwert ?
Gibt es das unter base überhaupt?
Ich habe mal vor Jahren notiert:
alter table "Übersicht" alter column "ID" RESTART WITH 1500
Aber bei meiner Überprüfung hat das niemals geklappt.
(Abgesehen von den Eigenschaften von ID (max Stellen ? ) und eventueller Automatik)
Danke für Diskussion.
Ich habe mal vor Jahren notiert:
alter table "Übersicht" alter column "ID" RESTART WITH 1500
Aber bei meiner Überprüfung hat das niemals geklappt.
(Abgesehen von den Eigenschaften von ID (max Stellen ? ) und eventueller Automatik)
Danke für Diskussion.
Zuletzt geändert von Pit Zyclade am Do 19. Okt 2023, 08:47, insgesamt 1-mal geändert.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Re: SQL Neugenerierung mit Startwert ?
Hallo Pit,
erste Frage ist eventuell Firebird oder HSQLDB.
Der andere Punkt wäre, ob es schon Datensätze mit höheren Werten gibt und woran Du erkennst, dass es nicht funktioniert.
Schau mal in die folgende Lösung von Robert:
https://ask.libreoffice.org/t/in-meiner ... m/65301/15
erste Frage ist eventuell Firebird oder HSQLDB.
Der andere Punkt wäre, ob es schon Datensätze mit höheren Werten gibt und woran Du erkennst, dass es nicht funktioniert.
Schau mal in die folgende Lösung von Robert:
https://ask.libreoffice.org/t/in-meiner ... m/65301/15
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit
-
- * LO-Experte *
- Beiträge: 3041
- Registriert: Mo 12. Nov 2012, 16:59
Re: SQL Index Neugenerierung mit Startwert ?
HSQLDB ist die Probedatei.
Vielleicht verstehe ich das Ziel nicht richtig?
Wenn ich eine Datei mit 5 Datensätzen habe, die alle in der Spalte ID Einträge anzeigen, den mit dem größten Wert habe ich auf 100 per Hand überschrieben, in den Einstellungen sind Länge 100 und Autowert eingetragen, gesichert, geschlossen und erneut geöffnet und nun per SQL
alter table "Übersicht" alter column "ID" RESTART WITH 1355
eingebe, dann wird mir zwar der Erfolg bestätigt, aber gleichzeitig kein Wert verändert und wenn ich nachprüfe, sind sie auch unverändert.
Vielleicht verstehe ich das Ziel nicht richtig?
Wenn ich eine Datei mit 5 Datensätzen habe, die alle in der Spalte ID Einträge anzeigen, den mit dem größten Wert habe ich auf 100 per Hand überschrieben, in den Einstellungen sind Länge 100 und Autowert eingetragen, gesichert, geschlossen und erneut geöffnet und nun per SQL
alter table "Übersicht" alter column "ID" RESTART WITH 1355
eingebe, dann wird mir zwar der Erfolg bestätigt, aber gleichzeitig kein Wert verändert und wenn ich nachprüfe, sind sie auch unverändert.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Re: SQL Index Neugenerierung mit Startwert ?
Hallo Pit,
der Befehl
setzt für den nächsten einzufügenden Datensatz die Nummer 1355 fest und zählt ab da weiter. Der Befehl gilt nur für die HSQLDB. Bei Firebird müsste "column" weggelassen werden und der Wert auf 1254 gesetzt werden, damit der nächste genutzte Wert 1355 ist.
Du beeinflusst damit nur den internen Zähler, der Dir die automatischen Werte liefert - nicht die bereits bestehenden Werte. Der nächste Datensatz hat dann die ID = 1355.
Wenn Du stattdessen bereits bestehende Werte ändern willst, dann geht so etwas mit einem UPDATE-Befehl:
Aber Vorsicht: jetzt wird bei allen Datensätzen die ID um den Wert 1355 erhöht! Ist es das, was Du erwartet hast?
der Befehl
Code: Alles auswählen
alter table "Übersicht" alter column "ID" RESTART WITH 1355
Du beeinflusst damit nur den internen Zähler, der Dir die automatischen Werte liefert - nicht die bereits bestehenden Werte. Der nächste Datensatz hat dann die ID = 1355.
Wenn Du stattdessen bereits bestehende Werte ändern willst, dann geht so etwas mit einem UPDATE-Befehl:
Code: Alles auswählen
UPDATE "Übersicht" SET "ID" = "ID"+1355
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- * LO-Experte *
- Beiträge: 3041
- Registriert: Mo 12. Nov 2012, 16:59
Re: SQL Index Neugenerierung mit Startwert ?
Hallo Robert (G)
Nein, ich Dummer dachte und suchte (obwohl es keinen dringenden Bedarf bei mir gibt) eine einfache Möglichkeit, wie man den Index neu aufbauen kann, aber mit einem Startwert größer 0 (denn das war mit ja bekannt).
Ich vermute jetzt, dass das nur in drei Schritten geht, erstens ID löschem, ID mit Standard neu generieren (kann ich schon) und dann als dritten Schritt den zweiten von dir genannten, der also alle um einen Betrag erhöht.
Richtig?
Danke für Anleitung!
ABER noch eine Frage: Wieso muss man bei Firebird (ich habe noch keine Anwendung selber) eine kleinere Zahl nehmen, um dennoch eine größere als Folge-ID zu erreichen? Was bedingt das?
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Re: SQL Index Neugenerierung mit Startwert ?
Hallo Pit,
bei Firebird gibt es nicht standardmäßig einen Autowert. Da ist diese Funktion über den Treiber von LibreOffice integriert. In Firebird selbst wird dazu ein Generator benutzt. Und dieser Generator bekommt jetzt die Botschaft: Nimm Zahl 1355. Damit ist die Zahl für ihn weg und die nächste Zahl, die er generiert, ist 1356.
Wir könnten jetzt natürlich hin gehen und das Ganze über den entsprechenden Code in LibreOffice an HSQLDB anpassen, aber wer diesen Code nutzt kann ja auch einmal ins Handbuch schauen. Da gibt es in Base deutlich wichtigere Baustellen.
Ich nutze das Ganze übrigens meist dann, wenn eine Datenbank alle Tests hinter sich hat und vor dem ersten Start von sämtlichen Testdaten befreit wird. Dann setze ich einmal den Startwert auf '1' fest, so dass es anschließend mit der ID=1 los geht und der Nutzer/die Nutzerin ist zufrieden.
Gruß
Robert
bei Firebird gibt es nicht standardmäßig einen Autowert. Da ist diese Funktion über den Treiber von LibreOffice integriert. In Firebird selbst wird dazu ein Generator benutzt. Und dieser Generator bekommt jetzt die Botschaft: Nimm Zahl 1355. Damit ist die Zahl für ihn weg und die nächste Zahl, die er generiert, ist 1356.
Wir könnten jetzt natürlich hin gehen und das Ganze über den entsprechenden Code in LibreOffice an HSQLDB anpassen, aber wer diesen Code nutzt kann ja auch einmal ins Handbuch schauen. Da gibt es in Base deutlich wichtigere Baustellen.
Ich nutze das Ganze übrigens meist dann, wenn eine Datenbank alle Tests hinter sich hat und vor dem ersten Start von sämtlichen Testdaten befreit wird. Dann setze ich einmal den Startwert auf '1' fest, so dass es anschließend mit der ID=1 los geht und der Nutzer/die Nutzerin ist zufrieden.
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: SQL Index Neugenerierung mit Startwert ?
Wenn Du die ID löscht, kannst Du die Tabelle nicht mehr schreiben/ändern - ist also keine gute Idee, wenn die Tabelle nicht leer ist.Pit Zyclade hat geschrieben: ↑Mi 18. Okt 2023, 18:16... suchte (obwohl es keinen dringenden Bedarf bei mir gibt) eine einfache Möglichkeit, wie man den Index neu aufbauen kann, aber mit einem Startwert größer 0 (denn das war mit ja bekannt).
Ich vermute jetzt, dass das nur in drei Schritten geht, erstens ID löschem, ID mit Standard neu generieren (kann ich schon) und dann als dritten Schritt den zweiten von dir genannten, der also alle um einen Betrag erhöht.
Richtig?
...
Den UPDATE-Befehl kannst Du direkt absetzen, allerdings werden die ID Werte nur +1355 erhöht. Wenn Du vorher 1, 2, 3, 4 hattest also 1356, 1357, 1358, 1359. Gab es aber Lücken, bleiben diese erhalten: 1, 3, 10, 19 > 1356, 1358, 1365, 1374. Um Lücken zu schliessen musst Du erst eine Zeilennummer bzw. Rang erzeugen und +1355 in die Datei schreiben. Leider wird ROWNUM() wohl erst ab HSQLDB V2.2 unterstützt und nicht von der in LO enthaltenen 1.8. (Nicht geprüft.)
Quick'n'dirty by kleiner DB: Komplett-Export nach Calc, dort ID herunterziehen, dann DB-Tabelke löschen und von Calc neu einspielen...
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit
-
- * LO-Experte *
- Beiträge: 3041
- Registriert: Mo 12. Nov 2012, 16:59
Re: SQL Index Neugenerierung mit Startwert ?
Doch das geht so, wie ich beschrieb! Ich hatte es experimentell überprüft:Wanderer hat geschrieben: ↑Mi 18. Okt 2023, 23:20Wenn Du die ID löscht, kannst Du die Tabelle nicht mehr schreiben/ändern - ist also keine gute Idee, wenn die Tabelle nicht leer ist.Pit Zyclade hat geschrieben: ↑Mi 18. Okt 2023, 18:16Ich vermute jetzt, dass das nur in drei Schritten geht, erstens ID löschem, ID mit Standard neu generieren (kann ich schon) und dann als dritten Schritt den zweiten von dir genannten, der also alle um einen Betrag erhöht.
Richtig?
...
1.
alter table "Übersicht" drop column "ID"
Danach DB sichern, schließen und neu öffnen.
2.
alter table "Übersicht" add column "ID" integer generated by default as identity before "Name"
3.
update "Übersicht" SET "ID" = "ID"+100
und dann beginnt ID nicht mit 0, sondern 100.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Re: SQL Index Neugenerierung mit Startwert ?
Hallo Pit,
habe ich das jetzt richtig verstanden? Du hast eine Tabelle mit Inhalt und Primärschlüssel "ID". Du nimmst diesen Schlüssel weg. Dann erhältst Du eine schreibgeschützte Tabelle (zumindest bei der internen HSQLDB). Du fügst jetzt ein Schlüsselfeld als AutoWert-Feld wieder hinzu??
Schon da müsste einiges nicht mehr funktionieren, denn es gibt ja lauter Zeilen, in denen kein Schlüsselwert existiert. Und das ist nicht möglich.
Eine bereits leere Tabelle kannst Du auch direkt mit ALTER TABLE auf den neuen Startwert setzen.
Gruß
Robert
habe ich das jetzt richtig verstanden? Du hast eine Tabelle mit Inhalt und Primärschlüssel "ID". Du nimmst diesen Schlüssel weg. Dann erhältst Du eine schreibgeschützte Tabelle (zumindest bei der internen HSQLDB). Du fügst jetzt ein Schlüsselfeld als AutoWert-Feld wieder hinzu??
Schon da müsste einiges nicht mehr funktionieren, denn es gibt ja lauter Zeilen, in denen kein Schlüsselwert existiert. Und das ist nicht möglich.
Eine bereits leere Tabelle kannst Du auch direkt mit ALTER TABLE auf den neuen Startwert setzen.
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
-
- * LO-Experte *
- Beiträge: 3041
- Registriert: Mo 12. Nov 2012, 16:59
Re: [gelöst} SQL Index Neugenerierung mit Startwert ?
Hallo Robert
Du machst mich stutzig. Vielleicht machst du ein kleines Beispiel, wo ich deine Zweifel nachvollziehen kann.
Ich sende hier meine (abstrakte) Beispieldatei, die ich benutzt habe, mit den IDs 1,3,5,100,105
Gruß
Pit
Du machst mich stutzig. Vielleicht machst du ein kleines Beispiel, wo ich deine Zweifel nachvollziehen kann.
Ich sende hier meine (abstrakte) Beispieldatei, die ich benutzt habe, mit den IDs 1,3,5,100,105
Gruß
Pit
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
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.