Seite 1 von 1

Autowert ändern mit firebird

Verfasst: Di 19. Jan 2021, 10:09
von Ruedi
hallo, ich habe im Frühling auf firebird umgestellt (leider). Da ich Rechnungsnummern und Belege in der HSQDB jeweils anfangs Jahr auf das neue Jahr + laufende Nummer umgestellt habe, stehe ich vor folgendem Problem: Ich kann den Autowert mit firebird nicht temporär auf "nein" stellen um den "Startwert" zu ändern. (Tabelle kopieren und umbenennen geht nicht).
1. Hat jemand einen Tip?
2. gibt es eine Möglichkeit wieder zurück auf HSQDB?

Ruedi

Re: Autowert ändern mit firebird

Verfasst: Di 19. Jan 2021, 12:51
von RobertG
Hallo Ruedi,

ich kopiere einmal einfach aus dem Handbuch, aktuelle Fassung LO 7.0, S. 128:
Bei FIREBIRD gestaltet sich der Zugriff auf den Autowert schwieriger, da er mit Hilfe von gesonderten
Generatoren erzeugt wird. Über

Code: Alles auswählen

SELECT RDB$FIELD_NAME, RDB$RELATION_NAME, RDB$GENERATOR_NAME FROM
RDB$RELATION_FIELDS WHERE RDB$GENERATOR_NAME IS NOT NULL
wird zuerst einmal ermittelt, wie der Generator überhaupt heißt, der zu dem entsprechenden Feld einer Tabelle gehört. Die Bezeichnungen werden in der internen Firebird-Datenbank als RDB$1, RDB$2 usw. fortgeschrieben. Dann kann der Wert mit

Code: Alles auswählen

ALTER SEQUENCE RDB$1 RESTART WITH 10;
Zurück zur HSQLDB ist ohne große Probleme möglich, wenn Du einfach eine neue Datenbank als HSQLDB erstellst und dann die Tabellen rüber kopierst. Falls Du aber mit Funktionen wie DATEADD() oder LIST() in den Abfragen gearbeitet hast, dann wirst Du an dieser Stelle deutlich Probleme bekommen. Denn so etwas wie 19.01.2021 + 1 = 20.01.2021 kann z.B. die interne HSQLDB nicht.

Gruß

Robert

Re: Autowert ändern mit firebird

Verfasst: Di 19. Jan 2021, 21:19
von Ruedi
Vielen Dank Robert, du hast mir wieder einmal kompetent geholfen. Zu erwähnen wäre vielleicht noch für Anfänger: Handbuch „Base“ für LibreOffice S.122 "Direkte Eingabe von SQL-Befehlen". Ich bleibe mal bei firebird.
Ruedi

Re: Autowert ändern mit firebird

Verfasst: Mi 4. Jan 2023, 21:32
von Ruedi
hallo, eine neue Frage zum gleichen Thema.
vor einem Jahr hat das schön funktioniert, habe mir eine Anleitung dazu geschrieben. Nun bekomme ich folgende Fehlermeldung beim Befehl: ALTER SEQUENCE RDB$1 RESTART WITH 2023001; (2023001 = neuer Wert am Ende der Tabelle)
3: firebird_sdbc error:
*Cursor is not open
caused by
'isc_dsql_fetch'

Ich habe zu wenig Erfahrung, was das bedeutet und finde auch nirgends Hilfe im Netz. Im neuesten Handbuch S. 141 ist das Prozedere etwas anders beschrieben, hat sich das (wieder) geändert. Wer kann mir auf die Sprünge helfen?

V 7.3.7.2 (x64)

Re: Autowert ändern mit firebird

Verfasst: Do 5. Jan 2023, 08:29
von RobertG
Zuerst einmal zum Autowert. Da hat sich bei Firebird inzwischen etwas getan. Das geht jetzt in Base auch mit

Code: Alles auswählen

ALTER TABLE "Tabellenname"
ALTER "ID" RESTART WITH <letzter_Feldwert>;
Es wird beim nächsten Mal dann der Wert genommen, der dem angegebenen Wert folgt.

Die Meldung *Cursor is not open habe ich noch nie gelesen. Gebe ich den Wert '2023001' in den Code für die Sequenz (ALTER SEQUENZ …) ein, so schreibt bei mir die Tabelle den nächsten Wert als ersten Wert: '2023002'.

Ist bei Dir vielleicht die Datenbankdatei noch nicht gestartet? Gehe zuerst in die Tabellenansicht und starte danach Extras → SQL …

Re: Autowert ändern mit firebird

Verfasst: Fr 6. Jan 2023, 16:19
von Ruedi
Funktioniert!
Damit die Fehlermeldung *Cursor is not open nicht kommt, muss das "Kästchen" SQL-Befehl direkt ausführen angekreuzt sein, das "Kästchen" Ausgabe der Anweisung Select ... nicht. Das habe ich zwar auch schon probiert, hatte aber vermutlich einen andern Fehler gemacht.
Das ist ganz brauchbar so, ich hoffe, dass es nächstes Jahr noch gleich funktioniert ;-),
Danke für deine Unterstützung.
Ruedi