AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Nummerierungs- Lücken per SQL-(SELECT) finden...
Thema durchsuchen
Ansicht
Themen-Optionen

Nummerierungs- Lücken per SQL-(SELECT) finden...

Ein Thema von Gast · begonnen am 13. Mai 2003 · letzter Beitrag vom 14. Mai 2003
Antwort Antwort
Gast
(Gast)

n/a Beiträge
 
#1

Nummerierungs- Lücken per SQL-(SELECT) finden...

  Alt 13. Mai 2003, 11:50
Hallo 8)

In einer SQL- Tabelle z.B. KUNDEN befinden sich in einer Spalte z.B. Spalte KDNUMMER die Kundennummer.

Angenommen wir haben in der Tabelle KUNDEN bereits 100 Datensätze. Dies bedeutet auch, dass in der Spalte KDNUMMER stehen in jedem Datensatz entsprechend die Kundennummer von 1 bis 100.

Mit der Zeit wurden aber die Kundennummer 20, 45 und 60 gelöscht... und somit auch die Datensätze.

Man will jetzt einen neuen Kunden anlegen. Normaleweise sollte er die Kundennummer = 101 kriegen.

PROBLEM:

Kann ich allein durch eine SQL- Anweisung (SELECT) mir an diese Stelle irgendwie die erste Lücke anzeigen (hier wäre das die KdNummer = 20)

Falls es eine Lösung gibt dann irgendwie komme ich hier nicht drauf....

Falls jemand ein Lösungsvorschlag hat ist dann mir egal ob es in Ms-SQL / Interbese usw... ist


Gruß

Paul Jr.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2
  Alt 13. Mai 2003, 13:53
Hallo,

versteh ich dich richtig dass du dem neuen Kunden dann die Nummer 20 geben willst? Davon würd ich abraten, da es den Kunden 20 schon mal in der Vergangenheit gab. Sicherer ist es daher trotzdem die Nummer 101 zu vergeben.

Aber zu deiner Frage... ich such mal, ich glaube schon mal sowas gehabt zu haben.

Gruss,
Tom
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#3
  Alt 13. Mai 2003, 14:08
Lieber Tom,

es geht hier nicht um Kunden oder Kundennummer...

Es geht hier viel mehr um Prinzip bzw. die FRAGE:


Lässt sich eine SQL-Anweisung so konzipieren, dass ich eine „Lücke“ als Ergebnis zurückbekomme...

Die KundenNummer dienten hier NUR als Beispiel... um die Problematik besser zu verstehen...

Ich hoffe, dass ich Dich beruhigt habe ....und wenn Du was zu diesem Thema finden solltest... es wäre TOLL 8)


Gruß

Paul Jr.

P.S.

Natürlich wie man ein TDataSet sequentiell durchläuft habe ich drauf...

/
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#4
  Alt 13. Mai 2003, 16:14
Hi Paul Jr.

nur mal so als Gedanke:

SQL arbeitet ja mengenorientiert, d.h. es gibt keinen ersten und keinen zweiten. Letztendlich brauchst Du aber genau das!

Mit ner "einfachen" SQL kommst Du da nicht ran (so nach dem Motto, vergleiche mir die ID mit der ID des Vorgängers). Aber auch mit ner Stored Procedure wüsste ich im Moment nicht wie das gehen soll....

Die Datenmenge auf dem Client zu durchlaufen macht aber ebenfalls keinen Sinn, sobald mehr als ein Benutzer auf die Datenmenge zugreifen kann!

Grüße
Lemmy
  Mit Zitat antworten Zitat
Benutzerbild von Garby
Garby

Registriert seit: 17. Mär 2003
Ort: Tirol
199 Beiträge
 
Delphi 2005 Professional
 
#5
  Alt 13. Mai 2003, 18:07
Hallo allerseits,

Das ist tatsächlich etwas gefinkelt...
In Oracle (und wahrscheinlich auch IB oder anderen SQL-DB´s) könnte das so funktionieren:
SQL-Code:
Select Min(KDNUMMER + 1) As KDNUMMER
  From KUNDEN t
 Where (Select Count(KDNUMMER)
          From KUNDEN
         Where KDNUMMER = t.KDNUMMER + 1) = 0
Diese Anweisung ist allerdings auch nicht 100%ig richtig.

z.B. habe ichs mit einer Tabelle probiert, dessen niedrigster Wert in der zu überprüfenden Spalte 181 ist.
Da gibt die Anweisung natürlich 182 zurück.
Walter
Wenn zwei dasselbe tun, ist es noch lange nicht dasselbe
(Adelphi)
  Mit Zitat antworten Zitat
Delphianer

Registriert seit: 19. Feb 2003
Ort: Rossau
149 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6
  Alt 13. Mai 2003, 19:00
Hallo,

das gleiche noch einmal ähnlich:

select min(k1.kdnummer)+1 kdnummer from kunden k1 where not exists (select k2.kdnummer from kunden k2 where k2.kdnummer=k1.kdnummer+1)

Die Anweisung hat allerdings einen Schönheitsfehler - sie sucht erst ab der ersten existierenden Kundennummer.

Viele Grüße
Lutz
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#7
  Alt 14. Mai 2003, 08:12
Hallo Männer! 8)

zuerst DANKE...und jetzt werde ich Eure Vorschläge prüfen und dann melde ich mich zurück...

Gruß

Paul Jr.
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#8
  Alt 14. Mai 2003, 09:20
Hallo Garby
Hallo Delphianer

Ihr BEIDE hat mir das gegeben was ich brauchte !

Dafür besten DANK...

Jetzt kann ich mir eine Storage-Procedure basteln die z.B. als Parameter die Minimale KUNDENNUMMER Zahl bekommt. Somit kann ich bestimmen was noch als Lücke zu interpretieren ist und was nicht.... usw...

Dieses SQL-Script habe ich dringend gebraucht...

Toll !!!

Viele Grüße

Paul Jr.
  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 18:27 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