Base - Autowert falsch

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

stegerpl

Base - Autowert falsch

Beitrag von stegerpl » Mi, 17.08.2016 09:31

Hallo,

Ich habe folgendes Problem: in einer Tabelle habe ich einen Primärschlüssel (Anzahl der Datensätze) als Autowert definiert und dieser zählt(e) auch wunderbar hoch. Aus nicht nachvollziehbaren Gründen (Fehlbedienung) sind jedoch Sprünge aufgetreten, sodass der Autowert nun nicht mehr der Anzahl der Datensätze entspricht. Offensichtlich gibt es dafür mehrere Auslöser: Löschen eines Datensatzes, manuelle Veränderung des Primärschlüssels (geht nach dem Speichern). Irgendwie nimmt Base in der Folge dann immer den größten Wert, der hier einmal eingetragen wurde.

Fragen:
-) wie kann ich den Autowert "zurücksetzen" damit er wieder bei der aktuell höchsten Nummer weiter zählt?
-) wie kann ich sicherstellen, dass dieses Verhalten nicht wieder auftritt? ggf. ein "Reset"-Makro

Danke!
Peter

RobertG
*******
Beiträge: 1750
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Base - Autowert falsch

Beitrag von RobertG » Mi, 17.08.2016 10:00

Hallo Peter,

das, was Du beschreibst, ist ein Missverständnis des Autowertes, dem sehr viele Anwender erliegen. Der Autowert ist nicht dazu gedacht, die Datensätze lückenlos durch zu nummerieren, sondern einfach nur jedem Datensatz ein einzigartiges Merkmal in Form einer Zahl zu verpassen. Unterschiedliche Datenbanken haben hier auch erst einmal unterschiedliche Startwerte implementiert. In der Standardeinstellung startet die internen HSQLDB den Autowert mit '0', MySQL z.B. startet mit '1'.
Was machst Du mit der Nummerierung, wenn ein Datensatz gelöscht wird? Dann fehlt zwischendurch eine Nummer und die Gesamtanzahl stimmt natürlich nicht mehr mit der Zahl des Autowertes überein. Vor allem beim Erstellen von Datenbanken geschieht es sehr häufig, dass Datensätze wieder gelöscht werden. Dann fehlen plötzlich sehr viele Werte zwischendurch. Und wieder hechelst Du dem hinterher, die Nummerierung mit der Anzahl in Übereinstimmung zu bekommen.
Was ist möglich?

Code: Alles auswählen

ALTER TABLE "Tabellenname" ALTER COLUMN "Feldname" RESTART WITH <neuer_Feldwert>
Du kannst den Startwert für die nächste Eingabe festlegen. Das bringt aber nur etwas, wenn Du Datensätze am Schluss einer Tabelle gelöscht hast. So etwas setze ich ein, wenn ich beim Aufbau einer Datenbank mit Dummydatensätzen gespielt habe und jetzt die Datenbank richtig nutzen will. Dann setze ich den neuen Feldwert auf '1' und meine Zählung beginnt mit '1'.
Das ganze geht auch über ein Makro gegebenenfalls für alle Tabellen automatisch. Siehe dazu im Handbuch im Kapitel "Makros" das Unterkapitel "Tabellenindex heruntersetzen ...".
Das alles beseitigt aber nicht das Problem, das Du hast, wenn Du zwischendurch Datensätze löscht.

Code: Alles auswählen

SELECT "ID", ( SELECT COUNT( "ID" ) FROM "Tabelle" WHERE "ID" <= "a"."ID" ) AS "lfdNr." FROM "Tabelle" AS "a"
Das Feld "ID" hat den Autowert. Durch die Abfrage wird im darauffolgenden Feld "lfdNr." eine durchgängig laufende Nummer von 1 an aufsteigend angezeigt. Du erhältst eine genaue Übersicht über die Anzahl der Datensätze. Details dazu sind ebenfalls im Handbuch zu finden: Kapitel "Datenbank-Aufgaben", Unterkapitel "Codeschnipsel" > "Zeilennummerierung".

Gruß

Robert

Gast

Re: Base - Autowert falsch

Beitrag von Gast » Mi, 17.08.2016 12:04

Hallo Robert,

vielen Dank für Deine prompte Antwort - JA das ist genau mein Problem/Missverständnis.

Das mit dem RESTART WITH werde ich mal ausprobieren. Wenn das die bestehenden Einträge NICHT löscht, wäre es auch genau die Lösung nach der ich gesucht habe => werde es als Makro hinter einer Schaltfläche verstecken, damit es auch für "Normal"-Benutzer zur Verfügung steht.

Hintergrund ist eine Inventardatenbank, welche wir gerade für unser Museum aufbauen. Da müssen wir derzeit alle Exponate (erstmals) erfassen. Welche Nummer welches Exponat bekommt ist dabei eigentlich egal, solange sie nur einmalig ist. Eine Sub-Organisation über die Nummernkreise habe ich von Haus aus abgelehnt (weil das in der Praxis nix wird). Somit können wir auch auftretende "Löcher" nachträglich befüllen.

Danke - Gruß
Peter

Welpe
*
Beiträge: 10
Registriert: Sa, 19.05.2018 20:28

Re: Base - Autowert falsch

Beitrag von Welpe » Di, 25.12.2018 18:26

Moin,

ich habe alle Datensätze einer Tabelle gelöscht und möchte nun das bei der Eingabe eines neuen Datensatzes die ID als Primärschlüssel wieder bei 0 oder 1 anfängt und hochzählt. Das Makro aus dem LO Handbuch V6.1 funktioniert bei mir aufgrund eines Syntaxfehlers nicht, keine Ahnung warum. Die Tabelle löschen und eine neue erstellen geht auch nicht da die Tabelle über Ansichten mit anderen Sachen verknüpft ist. Nun bin ich ein wenig am verzweifeln, kann man die IDs nicht zurücksetzen? Muß ich stattdessen jedem Datensatz manuell eine fortlaufende Nummer zuweisen?

Wo gebe ich den Code ein und was muß ich am Ende für <neuer_Feldwert> eingeben?

Code: Alles auswählen

ALTER TABLE "Tabellenname" ALTER COLUMN "Feldname" RESTART WITH <neuer_Feldwert>
Fragen über Fragen, ich hoffe mir kann jemand weiter helfen
Frohe Weihnachten
Welpe
AOO 4.1.5 | Win10

RobertG
*******
Beiträge: 1750
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Base - Autowert falsch

Beitrag von RobertG » Mi, 26.12.2018 07:55

Hallo Welpe,

Eingaben von SQL-Code erfolgen unter Extras > SQL. (Handbuch so ca. S. 117)
Wenn Du eine leere Tabelle hast und dort mit dem Wert 1 beginnen möchtest, dann heiß der Code dazu

Code: Alles auswählen

ALTER TABLE "Tabellenname" ALTER COLUMN "Feldname" RESTART WITH 1
(Handbuch ca. S. 123)

Gruß

Robert

Welpe
*
Beiträge: 10
Registriert: Sa, 19.05.2018 20:28

Re: Base - Autowert falsch

Beitrag von Welpe » Fr, 28.12.2018 20:13

Hallo Robert,

danke für die schnelle Antwort. Ich habe folgenden Code unter SQL eingegeben.

Code: Alles auswählen

ALTER TABLE "Aufträge" ALTER COLUMN "ID" RESTART WITH 1
als Antwort bekomme ich dann:

Code: Alles auswählen

1: This operation is not supported in statement [ALTER TABLE "Aufträge" ALTER COLUMN "ID" RESTART WITH 1]
Tabellenname: Aufträge
Feldname: ID
Feldtyp: Integer

Außerdem habe ich auch mal versucht unter Extras -> Beziehungen die Verknüpfungen zwischen den Tabellen zu löschen und dann nochmal den Code ausgeführt. Leider mit dem selben Ergebniss.
Über das Handbuch auf Seite 119 bin ich auf die Seite http://www.hsqldb.org/doc/1.8/guide/ch0 ... le-section gestoßen und hab dort geschaut, finde aber auch nichts anderes. Im Handbuch steht noch etwas von einer externen HSQLDB mit Benutzernamen, das trifft für mich nicht zu oder?! Hast Du vielleicht noch eine Idee?


Gruß Welpe
AOO 4.1.5 | Win10

RobertG
*******
Beiträge: 1750
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Base - Autowert falsch

Beitrag von RobertG » Sa, 29.12.2018 09:10

Hallo Welpe,

was für einen Datenbank hast Du denn? Steht unten in dem Startbildschirm "Eingebettete Datenbank HSQL Datenbank-Engine"?
Handelt es sich bei dem Feld "ID" in der Tabelle "Aufträge" tatsächlich um einen Primärschlüssel, der als AutoWert hoch geschrieben wird?

Gruß

Robert

Welpe
*
Beiträge: 10
Registriert: Sa, 19.05.2018 20:28

Re: Base - Autowert falsch

Beitrag von Welpe » Sa, 29.12.2018 17:20

Hallo Robert,

ja es ist eine "Eingebettete Datenbank HSQL Datenbank-Engine" aber der Primärschlüssel war kein AutoWert.
Asche auf mein Haupt, das hatte ich übersehen. Nun funktioniert alles so wie ich es möchte.

Vielen Dank für Deine Hilfe und komm gut ins neue Jahr.
Gruß Marko
AOO 4.1.5 | Win10

Antworten