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

❤️ 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. 🤗

[gelöst} SQL Index Neugenerierung mit Startwert ?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

[gelöst} SQL Index Neugenerierung mit Startwert ?

Beitrag von Pit Zyclade » Mi 18. Okt 2023, 15:29

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.
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.

Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: SQL Neugenerierung mit Startwert ?

Beitrag von Wanderer » Mi 18. Okt 2023, 15:46

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
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: SQL Index Neugenerierung mit Startwert ?

Beitrag von Pit Zyclade » Mi 18. Okt 2023, 16:10

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.
LO 24.8.7.2 (X86_64) / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: SQL Index Neugenerierung mit Startwert ?

Beitrag von RobertG » Mi 18. Okt 2023, 17:11

Hallo Pit,

der Befehl

Code: Alles auswählen

alter table "Übersicht" alter column "ID" RESTART WITH 1355
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:

Code: Alles auswählen

UPDATE "Übersicht" SET "ID" = "ID"+1355
Aber Vorsicht: jetzt wird bei allen Datensätzen die ID um den Wert 1355 erhöht! Ist es das, was Du erwartet hast?
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

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: SQL Index Neugenerierung mit Startwert ?

Beitrag von Pit Zyclade » Mi 18. Okt 2023, 18:16

RobertG hat geschrieben:
Mi 18. Okt 2023, 17:11
Hallo Pit,

.... Ist es das, was Du erwartet hast?
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.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: SQL Index Neugenerierung mit Startwert ?

Beitrag von RobertG » Mi 18. Okt 2023, 19:51

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
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

Wanderer
* LO-Experte *
Beiträge: 909
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: SQL Index Neugenerierung mit Startwert ?

Beitrag von Wanderer » Mi 18. Okt 2023, 23:20

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?
...
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.

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

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: SQL Index Neugenerierung mit Startwert ?

Beitrag von Pit Zyclade » Do 19. Okt 2023, 08:18

Wanderer hat geschrieben:
Mi 18. Okt 2023, 23:20
Pit Zyclade hat geschrieben:
Mi 18. Okt 2023, 18:16
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?
...
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.
Doch das geht so, wie ich beschrieb! Ich hatte es experimentell überprüft:
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.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: SQL Index Neugenerierung mit Startwert ?

Beitrag von RobertG » Do 19. Okt 2023, 08:46

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
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

Pit Zyclade
* LO-Experte *
Beiträge: 3041
Registriert: Mo 12. Nov 2012, 16:59

Re: [gelöst} SQL Index Neugenerierung mit Startwert ?

Beitrag von Pit Zyclade » Do 19. Okt 2023, 09:02

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
base - Testdatenbank mit Zeitfeld .zip
nicht enzippen, umbennen in *.odb
(10.44 KiB) 290-mal heruntergeladen
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.


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