Frage stellen
0

Wie kann ich Base dazu bewegen, bei der Eingabe neuer Datensätze eine automatische ID größer der größten vorhandenen zu vergeben?

gefragt 2020-01-08 18:32:42 +0100

HHolger Gravatar-Bild

Bei der Eingabe neuer Datensätze wird immer bei der ersten freien ID angefangen. Das geht so lange gut, bis man auf eine schon vorhandene ID trifft. Dann kommt es zu einer Fehlermeldung und das Speichern wird verweigert, da die ID ja eindeutig sein muss.

Bearbeiten Tags ändern Melden schließen vereinen löschen

Kommentare

Mit welcher Datenbank arbeitest Du? Base ist nur die Benutzeroberfläche. Bei den internen Datenbanken HSQLDB und Firebird ist es so, dass ein AutoWert Werte immer nur einmal vergibt. Wie kommst Du zu den höheren Werten für die ID?

Hast Du vielleicht händisch eine höhere ID vergeben? Dann bekommst Du bei der internen Firebird-Datenbank Probleme, weil dort die AutoWert-Spalte nur über einen Generator erstellt wird. Und diese Möglichkeit kann nicht voraussehen, dass da irgendein höherer Wert vergeben wird, als der Wert, den der Generator berechnet hat. Das ist das, was zum Teil wohl in der Meldung Bug 128558 steckt.

RobertG Gravatar-BildRobertG ( 2020-01-08 20:46:33 +0100 )Bearbeiten

Zunächst einmal vielen Dank für Deine Antwort. Die Datenbank ist firebird. Es erscheint zwar keine Fehlernummer aber folgender Text:

firebird_sdbc error: *violation of PRIMARY or UNIQUE KEY constraint "INTEG_2" on table "DVDs und Filme" *Problematic key value is ("ID" = 181) caused by 'isc_dsql_execute'

Ich habe zwar keine IDs händisch hinzugefügt, aber in Laufe der Zeit einige Datensätze von Hand gelöscht. Es ist wohl so, dass irgendwann mal danach die ID in der DB auf 0 zurück gesetzt wurde und jetzt wieder fortlaufend hoch gezählt wird. Jede schon vorhandene ID erzeugt dann also eine Fehlermeldung bei der Eingabe neuer Datensätze.

HHolger Gravatar-BildHHolger ( 2020-01-09 14:09:31 +0100 )Bearbeiten

Und da ist natürlich die Frage, wer die ID zurückgesetzt hat. Außerdem auch noch die Frage, wann die Datenbank erstellt worden ist, da Firebird in verschiedenen LO-Versionen in unterschiedlichen Varianten zur Verfügung steht. Ich poste einmal aus dem Handbuch den Inhalt, der dazu passt, als Antwort.

Bei der Neueingabe wird übrigens in aktuellen LO-Firebird-Versionen der Zähler dann trotzdem hoch gesetzt (bei Deinem Beispiel auf 181) und die jetzt folgende Eingabe macht daraus dann einen neuen Schlüssel von 182.

RobertG Gravatar-BildRobertG ( 2020-01-10 19:34:07 +0100 )Bearbeiten

1 Antwort

0

geantwortet 2020-01-10 19:35:22 +0100

RobertG Gravatar-Bild

Aus dem Base-Handbuch:

Bei FIREBIRD gestaltet sich der Zugriff auf den Autowert schwieriger, da er mit Hilfe von gesonderten Generatoren erzeugt wird. Über

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

ALTER SEQUENCE RDB$1 RESTART WITH 10;

zum Beispiel der Generator RDB$1 mit einem neuen Startwert '10' versehen werden. Das bedeu- tet aber, dass der nächste automatische Wert, der eingefügt wird, jetzt '11' ist.

Bearbeiten Melden löschen Link mehr

Kommentare

Danke. Das war der richtige Tipp. Ich habe die ID mit den obigen SQL-Befehlen auf den größten vorhandenen Wert gesetzt und er wird jetzt von da ab weitergezählt. Die Datenbank ist schon über 10 Jahre alt und ich selbst habe an der ID nichts verändert. Das muss passiert sein, als ich zum ersten Mal die Version 6.3 ausprobiert habe. Dass der Zähler trotzdem hochgesetzt wurde war natürlich gut, denn so konnten neue Datensätze in den Lücken gespeichert werden. Also noch mal vielen Dank für Deine Hilfe.

HHolger Gravatar-BildHHolger ( 2020-01-16 18:55:03 +0100 )Bearbeiten
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2020-01-08 18:32:42 +0100

Angesehen: 39 Mal

Aktualisiert: Jan 10