AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi ID bei neuem Datensatz automatisch hochzählen
Thema durchsuchen
Ansicht
Themen-Optionen

ID bei neuem Datensatz automatisch hochzählen

Ein Thema von Luca Haas · begonnen am 3. Nov 2017 · letzter Beitrag vom 6. Nov 2017
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 14:51
"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 ?
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Luca Haas

Registriert seit: 23. Aug 2017
Ort: Bad Breisig
139 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 15:38
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 15:43
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.
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 15:45
Das Auffüllen kann in bestimmten Fällen Sinn machen. Es gibt aber auch viele Szenarien, in welchen es zu Problemen führen kann.
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 15:45
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 15:46
ps.
vielleicht hilft das ja schon ?

http://www.delphipraxis.net/85745-da...ds-finden.html
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Luca Haas

Registriert seit: 23. Aug 2017
Ort: Bad Breisig
139 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 15:55
Wofür möchtest Du die ID benutzen?
Also es geht um keinen Primärschlüssel, ich möchte damit quasi das n einer 1:n Beziehung darstellen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#8

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 16:05
Bei 1:n zeigen n Datensätze auf einen. Üblicherweise wird das durch einen Primärschlüssel auf der "1"-Seite und einen Fremdschlüssel auf der "n"-Seite realisiert. Dabei ist es aber völlig unerheblich, welchen Wert der Primärschlüssel hat und ob dort vielleicht Lücken vorliegen. Also nochmal für Doofe wie mich: wozu genau benötigst Du den Wert und wieso soll man ihn nachträglich ändern können?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 16:06
Dabei muss n weder eine Zahl, noch lückenlos sein, sondern höchstens nur irgendwas, was man aufsteigend soritieren kann, sofern n auch als Sortierkriterium dienen soll.

Die Ergebnisreihenfolge bei 'ner aufsteigenden Sortierung der ID ändert sich ja nicht, wenn die 4 fehlt.

Und wenn der nächste Satz einfach die erste freie ID bekommt, dürfte die ID kaum als (sinnvolles) Sortierkriterium dienen können. Es bedeutet dann ja nur: Ist nach ID sortiert, aber z. B. nicht in der Reihenfolge des Einfügens in die Datenbank ...

Ohne genaue Beschreibung der Notwendigkeit, halt' ich das für 'ne unnütze Spielerei ohne irgendeinen Mehrwert.

AutoInc-Werte sind nunmal dazu da, dass ein neuer Satz eine neue Nummer am Ende des genutzten Nummernkreises erhält. Sie ist nicht für irgendwelche sonstigen fachlichen Sachen geeignet, jedenfalls dann nicht, wenn man den Wert anschließend beliebig ändern kann.

So 'ne ID soll die Eindeutigkeit sichern, was bei wiederholter Verwendung aber wohl kaum dauerhaft sicher und fehlerfrei zu garantieren ist.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 20:47
Wofür möchtest Du die ID benutzen?
Also es geht um keinen Primärschlüssel, ich möchte damit quasi das n einer 1:n Beziehung darstellen.
Du kannst auch 1:n Beziehungen vollkommen ohne die von Dir genannten Kriterien "aufsteigend", "lückenfrei" usw. erstellen.
1:n sagt, zu einem bestimmten (genau bestimmbaren) Datensatz in einer Tabelle A, gibt es in einer anderen Tabelle B n Datensätze, die genau zu dem einen in Tabelle A gehören. Dies wird dadurch realisiert, dass die n Datensätze der Tabelle B in einer bestimmten Spalte den identischen Wert aus Tabelle A führen.

Es ist sozusagen State of the Art, diese Werte als ID/ Primärschlüssel und Fremdschlüssel zu bezeichnen.

Damit Entwickler und alle, die es wissen sollten, das leicht erkennen, gibt es zu diesen Begriffen auch analoge Sprachkonstrukte in SQL. Die ermöglichen die explizite Definition von Primary und Foreign Keys (Primär / Fremdschlüssel), was es wiederum dem Datenbanksystem erlaubt, diese Vorgaben zu überwachen und deren Einhaltung zu garantieren(!).

Alternativ kannst Du komplett ohne diese Begriffe und Definitionen und ihre Kenntnis arbeiten, nur durch die Anwendung von SQL Mengenoperationen. Damit verschenkst Du erhebliche Teile der Datenbankfunktionalität.

Oder noch mal andersrum:
Wenn Du selber fachlich keinen Bedarf an der Lückenlosigkeit der Zahlen hast, den hat auch niemand anders. Jedenfalls nicht die Datenbank und auch nicht eine 1:n Beziehung. Vergiss es einfach.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:08 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