Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sql-Statement für kleinste nicht vorhanden Nummer (https://www.delphipraxis.net/10379-sql-statement-fuer-kleinste-nicht-vorhanden-nummer.html)

barnti 17. Okt 2003 11:29


Sql-Statement für kleinste nicht vorhanden Nummer
 
Hallo Alle,

ich versuche für eine Tabelle eine ID zu generieren. Dazu möchte ich die kleinste noch nicht vorhandene ID für den neuen Eintrag vergeben. Wie kann ich das effizient in ein SQL-Statement umsetzen?

Danke für eure Ideen, Gruß,

Barnti

Hansa 17. Okt 2003 11:43

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Üblicherweise macht man das mit einem Before-Insert-Trigger.

barnti 17. Okt 2003 11:52

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Aha,

kannst Du das etwas ausführlicher erläutern. So kannn ich mit Deiner Antwort leider nicht viel anfangen...

Gruß,

Barnti

Hansa 17. Okt 2003 12:00

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Das war mir schon klar. 8) Aber das ist zu kompliziert, um es in einem Satz zu erklären, deshalb hab ich Dir das Stichwort "Trigger" gegeben. Das ist eine DB-Funktion, die praktisch im Hintergrund nur darauf wartet, etwas tun zu dürfen. In dem Zusammenhang kommen auch Generatoren ins Spiel. Der Trigger setzt den Generatorwert (das ist die gewünschte ID) um eins hoch. Hört sich kompliziert an, so schlimm ists aber gar nicht. Ich empfehle Dir hierzu den Kurs von Paul Jr., frage mich aber nicht wo der ist. Mußt suchen.

Tanadirian 17. Okt 2003 12:14

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Du kannst es auch umständlich machen! Mit einer Abfrage und einer Schleife :wink:


SQL-Code:
select ID as ID from Table1
damit bekommst du die Werte der ID-Spalte schon geordnet (aufsteigend!?)

Delphi-Quellcode:
i:=1;
repeat
if i <>query1.fieldbyname('ID').asinteger then break;
(*Mit dem "<>" bin ich mir nicht ganz sicher kann auch nur "<" sein*)
i:=i+1;
query1.next;
until i=query1.recordcount+1;//damit die Schleife auch mal endet
//jetzt ist i der kleinste ID-Wert der fehlt

Das Beispiel geht natürlich davon aus das deine ID's bei 1 anfangen!

r_kerber 17. Okt 2003 12:16

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
@Hansa: Nicht jede Datenbank kennt Generatoren!
@Tanadirian: Und was machst Du, wenn während Du suchst, Datensätze gelöscht oder hinzugefügt werden werden?

Tanadirian 17. Okt 2003 12:24

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
@r_kerber: Man kann in diesem Fall doch am Ende die Recordcounts von Query1 und Table1 vergleichen und wenn sie nicht übereinstimmen muß man halt das Ganze nochmal machen. (Ich hoffe du meintest das, ansonsten versteh ich deine Frage nicht :oops: )

r_kerber 17. Okt 2003 12:30

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Was hältst Du dann von einer Tabelle, in der die ID geführt wird. Im Insert-Trigger wird dann transaktionssicher die nächste ID ermitteln. Dies im Client-Programm machen zu wollen, halte ich für ungünstig!

Tanadirian 17. Okt 2003 12:32

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
So fit bin ich leider auch noch nicht in SQL :(

r_kerber 17. Okt 2003 12:37

Re: Sql-Statement für kleinste nicht vorhanden Nummer
 
Alternativ kann mann auch einen Generator (Interbase) oder Sequence (Oracle) verwenden oder für ID einen AutoInc-Datentyp (z.B. Seriell in Informix) verwenden! Damit bist Du dann aber abhängig von der Datenbank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr.
Seite 1 von 3  1 23      

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