Stefan Scheurer: Die ID in der Access Datenbank

hallo zusammen!

ich habe ne frage bezüglich der ID meine Acccess 2k DB.
Ich habe die ID auf den AutoWert gesetzt!

Ich fügte schön meine Daten ein.
Die ID erhöhte sich immer um 1.

das ging bis zu ID=5. Da merkte ich, dass ich die ganze zeile falsch hatte und löschte die Zeile nr 5.
dann wollte ich ne neue zeile machen. Da setze sich der autowert der ID auf 6.
D.h., dass ich die ID=5 gar nie mehr erhalten, denn wenn ich die 6 lösche und eine neue zeile schreiben will, dann hat die ID den wert 7.
ich kann also keine "normale" erhöhung mehr machen. was muss ich tun?
---------------------------
ich muss eben ne schöne folgerung haben, da ich das zeugs aulese und das MUSS stimmen!!!

sollte glaubs klar sein :)

cu allerseits

  1. Tach!

    das ging bis zu ID=5. Da merkte ich, dass ich die ganze zeile falsch hatte und löschte die Zeile nr 5.
    dann wollte ich ne neue zeile machen. Da setze sich der autowert der ID auf 6.
    D.h., dass ich die ID=5 gar nie mehr erhalten, denn wenn ich die 6 lösche und eine neue zeile schreiben will, dann hat die ID den wert 7.
    ich kann also keine "normale" erhöhung mehr machen. was muss ich tun?

    Unter A97 konnte man die DB defragmentieren (sie nennen das "komprimieren"), dann wurde wieder der naechste unbenutzte Autowert verwendet.

    ich muss eben ne schöne folgerung haben, da ich das zeugs aulese und das MUSS stimmen!!!

    Dann musst Du die Nummern schon selbst vergeben. Ich bin auch dazu uebergegangen, weil es mit den automatisch vergebenen Zahlen zu jeder Gelegnheit Probleme gibt (man kann sie ja nichtmal selber aendern).

    HTH && So long

    1. ja, okay, thx

      aber es ist scheisse, wenn ich das zeugs selber eintippen muss.....das ist fuck....denn ich muss das zeugs für einen 50-jährigen programmieren......der nicht so ahnung davon hat...das sollte für ihn huerä easy sein.......naja, easy, trotzdem thx für deine antwort

      cu

      1. Hallo Leute!

        Die "automatischen IDs" haben allerdings, glaube ich, auch eine ganz andere Bedeutung: So etwas nennt man z.B. bei Oracle "Sequences". Diese Sequences sind extra so angelegt, daß sie bei der Nutzung "verbrennen".
        Ziel: In einer Client-Server-Welt wird niemals eine Nummer zweimal vergeben, da die Datenbank die Sequenzzahl als Service anbietet, das heißt, sie kann auch steuern, daß niemals dieselbe zweimal aufgerufen wird...
        So oder so: Wenn Du ein einfaches Programm mit nur einem Client hast, dann hole Dir einfach die nächste Zahl so:

        SELECT MAX(idfeld)+1 AS NAECHSTE
          FROM tabelle
          ORDER BY idfeld

        Das ORDER BY forciert dabei eine Indexsuche, so daß kein full-table-scan, also eine Suche über die ganze Datenbank vonnöten ist. Das hält die Geschwindigkeit erträglich.

        Viel Spaß denne noch

        Jürgen (der-hofft-es-war-nicht-zu-technisch)


  2. ich muss eben ne schöne folgerung haben, da ich das zeugs aulese und das MUSS stimmen!!!

    Hi, ich hätte noch ne andere Lösung:
    Füg das Feld erst zu, wenn du alle DS in der Tabelle hast, bzw lösche den Schlüssel und für einen neuen hinzu (alter table add column). Das einfach als Aktion eines Buttons oder in Aktion "after update". Das hat den Effekt, daß du eine wirklich saubere Reihenfolge auf einem PrimaryKey hast!

    Gruss, Carsten

    1. Hi!

      Füg das Feld erst zu, wenn du alle DS in der Tabelle hast, bzw lösche den Schlüssel und für einen neuen hinzu (alter table add column). Das einfach als Aktion eines Buttons oder in Aktion "after update". Das hat den Effekt, daß du eine wirklich saubere Reihenfolge auf einem PrimaryKey hast!

      Na Du bist ein Kuenstler. Wenn man einen PrimaryKey einfach so loeschen koennte, braeuchte man gar keinen. Der Sinn ist schliesslich, dass diese Spalte aus anderen Tabellen referenziert wird. Man kann nicht mal einen Datensatz loeschen, solange der von woanders referenziert wird. Referentielle Integritaet nennt man das.

      So long