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 2 von 2     12   
Benutzerbild von Mokus
Mokus

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

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 16: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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#12

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 16:51
Wenn das AutoInc-Feld als TFDAutoIncField angelegt ist (sollte bei automatischer Erkennung der Fall sein), dann kannst du über IdentityInsert den Wert vorgeben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Luca Haas

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

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 16: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.624 Beiträge
 
Delphi 12 Athens
 
#14

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 17: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
 
#15

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 17: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
 
#16

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 3. Nov 2017, 21: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
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
536 Beiträge
 
Delphi 12 Athens
 
#17

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 4. Nov 2017, 09:02
Bei einigen unserer Kunden hat der beschriebene und auch nicht einfach zu vermeidende Umstand dass per Autoinc erzeugte Werte nicht unbedingt lückenlos sind, schon zu Misstrauen bei Betriebsprüfungen durch das Finanzamt geführt. Dabei ging es nicht um Rechnungsnummern, wo ich das noch verstehen könnte, sondern um Datensatz-IDs von Buchungen.

Die beste Lösung für dieses Problem ist einfach: Man macht diese Werte, die der Anwender ja eigentlich weder zu sehen noch zu bearbeiten hat einfach unsichtbar.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#18

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 4. Nov 2017, 10:09
Da die ID eine Verwaltungsinformation der DB ist, hat sie ausserhalb der selbigen keinen Informationswert. Es sei denn, Du möchtest die Eintragung von Daten in einer zeitlichen Abfolge betrachten (Debugging). Was auch nur möglich ist wenn die ID über autoinc generiert wird.
Wenn Du zb. 5 neue Datensätze generierst und diese per rollback verwirfst, hast Du schon eine Lücke von 5 Werten.
Auch wenn es schon gesagt wurde, die ID dient einzig der eindeutigen Identifizierung des Datensatzes. Welchen Wert sie hat, ist vollkommen unerheblich.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
bnreimer42

Registriert seit: 26. Mai 2013
Ort: Erlangen, Franken
126 Beiträge
 
Delphi 12 Athens
 
#19

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 4. Nov 2017, 10:21
Ich bin immer wieder verwundert, wie viele Gedanken man sich über die IDs machen kann.

Selbstverständlich sind die IDs reine technische Schlüssel und dürfen keine Semantik haben! Sonst ist das DB-Design "defekt".

Insbesondere darf man die IDs nie als Rechnungsnummer oder Aktenzeichen oder soetwas ähnliches benutzen. Dazu muss man eine eigenes Feld verwenden!

Daraus ergibt sich, dass IDs immer über AutoInc-Mechanismen (Oder bei Firebird Trigger mit gen_id()-Aufruf) erstellt werden sollten.

Ich mache mir auch keine Gedanken mehr, ob eine Tabelle ein ID-Feld benötigt: Es schadet nicht, wenn jede Tabelle eines hat und es hilft in jedem Fall, wenn man exakt einen Datensatz ansprechen will, z.b. beim Bearbeiten.


Einzig valide Frage ist, wie kommt man - um z.B. eine Fremdschlüsselbeziehung zu einem neuen Datensatz anzulegen, an den letzten ID-Wert und das geht prinzipiell immer erst, wenn der Datensatz in der DB gespeichert ist.

Bei u.a. Firebird gibt es dazu das wunderbare RETURNING-Konstrukt um bei einem Insert gleich Werte (z.B. die des ID-Feldes) zurückzubekommen.

Für FireDAC gibt es die schöne Doku-Seite http://docwiki.embarcadero.com/RADSt...lder_(FireDAC), die dazu alles zusammenfasst.
Björn Reimer
  Mit Zitat antworten Zitat
Luca Haas

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

AW: ID bei neuem Datensatz automatisch hochzählen

  Alt 6. Nov 2017, 08:57
Okay ich sehe grade, dass ich am Freitag ganz schön großen Mist geschrieben habe
Also ich haben 2 Tabellen, eine in der nur eine ID und eine "Aufgabe" steht, in der anderen Tabelle habe ich dann die jeweilige ID der Aufgabe, sowie alle Arbeitsschritte mit einer Position.
Diese Position hätte ich am liebsten durchgehend, mit der ID habe ich kein Problem

Falls jemand meinen Aufbau nicht verstanden hat, habe ich einen Screenshot angehangen
Miniaturansicht angehängter Grafiken
ashampoo_snap_2017.11.06_08h56m38s_001_aufgabenmuster.png  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz