AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vergabe einer Nummer

Ein Thema von Rippo · begonnen am 10. Sep 2015 · letzter Beitrag vom 10. Sep 2015
Antwort Antwort
Rippo

Registriert seit: 10. Feb 2015
75 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Vergabe einer Nummer

  Alt 10. Sep 2015, 13:14
Datenbank: Firebird • Version: 2.5 • Zugriff über: SQL
Hallo

Ich habe ein Grid, das Grid enthält ein Feld namens Schlüsselnummer. Dieses Feld habe ich mit einem UNQ bestückt. Die nummer darf nur einmal vorkommen. Wenn ich die Anwendung öffne und ein neuen datensatz einfügen möchte, wie schaffe ich es das wenn ich eine neue zeile erschaffe das Feld Schlüsselnummer bereits eine neue nummer vergeben bekommen hat und diese nicht mehr überschreibbar ist?.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Vergabe einer Nummer

  Alt 10. Sep 2015, 13:18
Eigentlich wird die Nummer erst beim Post neu erzeugt. Du kannst diese abe auch vorab holen:

select GEN_ID( <Generatorname>, <Schrittweite>) from rdb$database; (Voraussetzung das der Trigger nur bei NULL-Werten eine neue Nummer erzeugt, sonst wird beim Einfügen eine weitere Nummer geholt).

Im Grid müsste diese Spalte dann readonly sein
Markus Kinzler
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Vergabe einer Nummer

  Alt 10. Sep 2015, 13:18
Wird der Wert nicht vom DBMS automatisch erzeugt oder soll das wirklich deine Anwendung machen?

Ich kenne Firebird jetzt nicht, aber wie verlässlich ist das denn, sich den Schlüssel im Vorab zu holen und darauf zu hoffen, dass in der Zwischenzeit niemand anderes einfügt und diesen Wert schon "verbraucht"?
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Vergabe einer Nummer

  Alt 10. Sep 2015, 13:21
Mit den Generatoren kann man das machen. Der nächste würde dann die nächsthöhere Nummer holen, auch wenn der erste noch nicht gespeichert hat. So könnte es natürlich zu Lücken in der Nummernvergabe kommen, aber das ist ja bei Primärschlüsseln meistens egal.
Kann man auch per Trigger + Generator lösen, dann hat man quasi ein Autoinc-Feld.
Jens
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Vergabe einer Nummer

  Alt 10. Sep 2015, 13:39
Wird der Wert nicht vom DBMS automatisch erzeugt oder soll das wirklich deine Anwendung machen?

Ich kenne Firebird jetzt nicht, aber wie verlässlich ist das denn, sich den Schlüssel im Vorab zu holen und darauf zu hoffen, dass in der Zwischenzeit niemand anderes einfügt und diesen Wert schon "verbraucht"?
Wenn ich mir mit 'ner Sequenz einen Wert hole, dann ist er vergeben. Für immer.
Es ist dabei dann egal, ob ich ihn heute oder morgen oder nächstes Jahr in die Datenbank schreibe, vergeben ist vergeben. Das Einzige, was zwingend ist: Jeder, alle ... wie auch immer... müssen sich den Wert über die Sequenz holen.

Und wenn ich mir einen Wert hole und diesen dann nicht nutze, dann ist in der Tabelle für diesen Wert halt eine Lücke, die nie wieder aufgefüllt werden wird.

Eine Sequenz liefert bei jedem Zugriff einen neuen Wert, unabhängig davon, ob irgendeiner der vorher erzeugten Werte jemals genutzt wurde.

Wenn natürlich irgendwer einfach so irgendwelche Werte nutzt, die er sich selbst erfindet, so kann es zu doppelten Werten kommen, das heißt aber auch: Da hat jemand nicht regelkonform mit der Datenbank gearbeitet.

Über eine Sequenz ist eine doppelte Vergabe eines Wertes nicht möglich, von daher kann es die Situation: aber wie verlässlich ist das denn, sich den Schlüssel im Vorab zu holen und darauf zu hoffen, dass in der Zwischenzeit niemand anderes einfügt und diesen Wert schon "verbraucht"? nicht geben.

Ähnlich wie bei einer GUID. Die ist (per Definition) eindeutig, wenn Du sie nutzt, dann schön, wenn nicht, wird niemand mehr diese GUID (zufällig) erzeugen und verwenden können.
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:23 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