AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Kommendes AutoInc Value bestimmen
Thema durchsuchen
Ansicht
Themen-Optionen

Kommendes AutoInc Value bestimmen

Ein Thema von ATS3788 · begonnen am 3. Nov 2017 · letzter Beitrag vom 8. Nov 2017
 
Hobbycoder

Registriert seit: 22. Feb 2017
1.017 Beiträge
 
#7

AW: Kommendes AutoInc Value bestimmen

  Alt 8. Nov 2017, 12:34
AutoInc wird im Normalfall vom DBMS verwaltet und dient in der Regel dazu, Datensätzen eine einzigartigen ID zu verpassen, um die sich das Anwendungsprogramm nicht kümmern muss.

Solange sichergesellt ist, dass eine Table nur von einem Cleint verwendet wird, was ja bei MemoryTables möglich ist, dann könnte man einfach mal Max(Couter) abfragen. Der nächste Int wäre dann wohl auch der nächste AutoInc-Wert.
ABER:
Ein DBMS speichert sich für die Tables die jeweiligen aktuellen AutoInc-Wert weg, und und nimmt dies zum Bestimmen des nächsten AutoInc-Werts.
Das heißt, wird aus der Table:
ID Name
1 Tom
2 Klaus
3 Peter
der Datensatz "Peter" gelöscht, bleibt der letzte AutoInc der Tabelle auf 3. Wenn jetzt "Willi" eingefügt wird, dann sieht die Tabelle so aus
ID Name
1 Tom
2 Klaus
4 Willi

Würde man also mit Max(ID) vor dem Einfügen von "Willi" abfragen, bekäme man als Result 2 und würde fälschlicherweise davon ausgehen, dass der nächste die 3 wäre.

Es gibt je nach DBMS auch die Möglichkeit für eine AutoInc den gespeicherten Wert abzufragen. Ob das bei MemoryTables auch geht, weiß ich nicht.

Oder du verwaltest Counter generell selbst, also kein AutoInc sondern nur ein normales Int-Feld. Dann kannst du generell mit Max(Couter)+1 den nächsten bestimmen, musst ihn aber dann auch selber mit eintragen.
Letzteres ist aber in eine Multiuser-Umgebung nicht wirklich zu empfehlen, dann es kann auf Grund verschiedener Ursachen immer dazu kommen, dass zwischen Abfrage des Max(Couter)+1 und dem tatsächlichen Speichern des Datensatzes doch noch ein anderes Speichervorgang eines anderen Clients dazwischen kommt. Und schon hätte eine Inkonsistenz.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz