Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ID bei neuem Datensatz automatisch hochzählen (https://www.delphipraxis.net/194262-id-bei-neuem-datensatz-automatisch-hochzaehlen.html)

Luca Haas 3. Nov 2017 14:35

Datenbank: MSSQL • Version: ? • Zugriff über: TADO Query

ID bei neuem Datensatz automatisch hochzählen
 
Hi Leute,
wie es im Titel schon steht versuche ich mich gerade daran, die ID einer Datenbank-Tabelle mit jedem neuen Datensatz um eins hochzuzählen.
Im Internet habe ich dazu nicht allzu viel gefunden, lediglich, dass ich mit SELECT MAX(ID) den höchsten Wert für ID herausfinden kann und diesen dann mit +1 erhöhe, allerding verstehe ich nicht wirklich wie ich das machen soll.

Mokus 3. Nov 2017 14:38

AW: ID bei neuem Datensatz automatisch hochzählen
 
Das hört sich sehr nach ner Identity spalte an,

vielleicht hilft die dir.

https://docs.microsoft.com/de-de/sql...ntity-property

@EDIT
und dann herauszufinden welche zuletzt eingefügt wurde, kann man sich das per SELECT SCOPE_IDENTITY() auslesen.

mkinzler 3. Nov 2017 14:38

AW: ID bei neuem Datensatz automatisch hochzählen
 
Wäre auch gefährlich. Ich würde das durch das DBMS erledigen lassen. Bei MSSQL gibt es dafür den Feldtyp COUNTER

Luca Haas 3. Nov 2017 14:49

AW: ID bei neuem Datensatz automatisch hochzählen
 
Mmh okay, ich habe ich jetzt ein wenig in Auto_Increment eingelesen und versuche es mal damit.
Erfüllt zwar nicht 100% seinen Zweck, aber kommt doch sehr nah an das gewollte Ergebnis ran.

Mokus 3. Nov 2017 14:51

AW: ID bei neuem Datensatz automatisch hochzählen
 
"Erfüllt zwar nicht 100% seinen Zweck"

zu begin wolltest du eine möglichkeit es immer um X hochzuzählen, das wäre genau das.

& was erwartest du ? ;)

Luca Haas 3. Nov 2017 15:38

AW: ID bei neuem Datensatz automatisch hochzählen
 
Jetzt habe ich nämlich das Problem, dass ich die ID nicht mehr ändern kann. Da ich einen Wert gelöscht habe, sehen meine ID´s nun so aus "1, 2, 3, 5, 6" und ich kann es leider nicht mehr rückgängig machen.

Oder gibt es doch eine Möglichkeit die "fehlenden" ID´s einzusetzen ?

Mokus 3. Nov 2017 15:43

AW: ID bei neuem Datensatz automatisch hochzählen
 
https://docs.microsoft.com/de-de/sql...t-transact-sql

also es gibt die möglichkeit identity insert übersteuern, aber dann müsste man sich die nächste halt von hand ermitteln.
Und ob du dir da ein gefallen mit auto inc. spalten tust, bezweifel ich.
Dabei hilft dir dann aber auch max(Spalte) + 1 ja auch nicht ...


falls du nachher keine antwort hast schau ich nochmal ob ich da noch ein SQL finde, was sowas ermittelt, das hört sich nämlich nach einem bekannten Problem an.

mkinzler 3. Nov 2017 15:45

AW: ID bei neuem Datensatz automatisch hochzählen
 
Das Auffüllen kann in bestimmten Fällen Sinn machen. Es gibt aber auch viele Szenarien, in welchen es zu Problemen führen kann.

jobo 3. Nov 2017 15:45

AW: ID bei neuem Datensatz automatisch hochzählen
 
Wofür möchtest Du die ID benutzen?
Wenn es um einen Primärschlüssel geht: Der benötigt keine "nahtlose", aufsteigende Folge von Zahlen, nicht mal Zahlen, nur Eindeutigkeit.
Wenn es tatsächlich um eine nahtlose, aufsteigende Zahlenfolge geht, musst Du relativ viel aufwand treiben, falls mit der Nutzung bspw. einer Sequenz und folgender Löschung auch Lücken gefüllt werden müssen. max(id) reicht dann offensichtlich nicht mehr.

haentschman 3. Nov 2017 15:46

AW: ID bei neuem Datensatz automatisch hochzählen
 
Moin...:P

Zitat:

Da ich einen Wert gelöscht habe, sehen meine ID´s nun so aus "1, 2, 3, 5, 6" und ich kann es leider nicht mehr rückgängig machen.
Du brauchst eine Kombination aus beidem. :thumb:

1: Die ID aus der IDENTIY > die macht den Datensatz global eindeutig
2: Die ID aus dem "dass ich mit SELECT MAX(ID) den höchsten Wert für ID herausfinden kann + 1" und einem Update von dem entsprechenen Datensatz.

-> 2 Felder sind die Lösung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz