Seite 1 von 1

Re: Base - Autowert falsch

Verfasst: Mi, 17.08.2016 10:00
von RobertG
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

Re: Base - Autowert falsch

Verfasst: Di, 25.12.2018 18:26
von Welpe
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

Re: Base - Autowert falsch

Verfasst: Mi, 26.12.2018 07:55
von RobertG
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

Re: Base - Autowert falsch

Verfasst: Fr, 28.12.2018 20:13
von Welpe
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

Re: Base - Autowert falsch

Verfasst: Sa, 29.12.2018 09:10
von RobertG
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

Re: Base - Autowert falsch

Verfasst: Sa, 29.12.2018 17:20
von Welpe
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