Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Lücken in fortlaufender Nummerierung finden (https://www.delphipraxis.net/188280-luecken-fortlaufender-nummerierung-finden.html)

noisy_master 16. Feb 2016 12:31

Datenbank: Paradox • Version: xx • Zugriff über: BDE

Lücken in fortlaufender Nummerierung finden
 
Hallo Gemeinde,

wie kann ich per Query herausfinden, ob ich Lücken in meiner Nummerierung habe?

Folgender Hintergrund: ich transferiere eine Tabelle, die ein Autoinc Feld hat in eine weitere Tabelle, die an der Stelle, wo in der ursprünglichen Tabelle das Autoinc Feld hat ein Integer Feld hat.
Dabei geht manchmal was schief(oder ist zumindest in der Vergangenheit). Die ursprüngliche Tabelle wird nach dem BatchMove auch geleert, so dass ich in dieser nicht mehr kontrollieren kann.

Daher die Frage kann ich(und wenn ja wie) per SQL die Datensätze herausfinden, wo in dieser Nummerierung Lücken auftauchen?

Danke im Voraus...

P.S.: bitte keinen Kommentar zur BDE... ich weiss schon : alt, blöd, instabil,....

Union 16. Feb 2016 12:45

AW: Lücken in fortlaufender Nummerierung finden
 
Z.b. in etwa so. Hauptsache es gibt einen Index auf das Feld und nicht zu viele Datensätze.
Code:
select a.nummer-1 as fehlt from tabelle a
where not exists (select b.nummer
                  from tabelle b
                  where b.nummer = a.nummer-1)

mkinzler 16. Feb 2016 12:45

AW: Lücken in fortlaufender Nummerierung finden
 
Es ist die Frage ob LocalSQL so mächtig ist aber man könnte es mit

SQL-Code:
select
  <Feldliste>
from
  <Tabelle> t
where
  not exists ( select <pk> from <Tabelle> t2 where t2.<pk> = t.<pk> + 1);

noisy_master 16. Feb 2016 12:59

AW: Lücken in fortlaufender Nummerierung finden
 
Soweit, so gut, aber es gibt nur 1 Tabelle....und dort soll geprüft werden ob das Feld "NUMMER" Lücken aufweist...daher dürften eure Ansätze nicht funktionieren, oder habe ich da jetzt was falsch verstanden?

Neutral General 16. Feb 2016 13:02

AW: Lücken in fortlaufender Nummerierung finden
 
Du hast was falsch verstanden.
Die SQLs der anderen waren auch nur für eine Tabelle gedacht.
Eine Tabelle kann durchaus mehrmals und unter mehreren Bezeichnungen in einer Query vorkommen

EDIT: Allerdings finden die bisher geposteten SQLs keine Lücken die größer als 1 Datensatz sind.
Kenn mich nicht mit Paradox aus aber am einfachsten ist es wahrscheinlich über eine Stored Procedure oder einen Execute Block (falls es sowas in Paradox gibt)

noisy_master 16. Feb 2016 13:05

AW: Lücken in fortlaufender Nummerierung finden
 
aaahhh okay, dann sorry, dass ich gemeckert habe... darum ja auch die Frage, ob ich was falsch verstanden habe.....

<knie_nieder> Schön, dass es hier so viele schlaue Leute gibt! </knie_nieder>

Neutral General 16. Feb 2016 13:06

AW: Lücken in fortlaufender Nummerierung finden
 
Zitat:

Zitat von noisy_master (Beitrag 1330498)
aaahhh okay, dann sorry, dass ich gemeckert habe... darum ja auch die Frage, ob ich was falsch verstanden habe.....

<knie_nieder> Schön, dass es hier so viele schlaue Leute gibt! </knie_nieder>

Habe meinen Beitrag grad nochmal ergänzt. Der Code von oben findet keine Lücken die größer 1 sind.

himitsu 16. Feb 2016 13:12

AW: Lücken in fortlaufender Nummerierung finden
 
Mit einem Generator alle "IDs" im gewünschten Bereich (z.B. 1 bis greatest oder besser noch bis NextAutoInc-1) erstellen und dann im WHERE alles rausfiltern, was es gibt.
Übrig bleiben die Lücken.

p80286 16. Feb 2016 13:18

AW: Lücken in fortlaufender Nummerierung finden
 
oder mit Hilfe von Delphi.
erst alle IDs holen, die es gibt, dann Liste mit IDs generieren die es geben sollte. Aus der Sollliste alles löschen was in der IstListe ist. Übrig bleiben die Lücken.

Gruß
K-H

frankyboy1974 16. Feb 2016 13:30

AW: Lücken in fortlaufender Nummerierung finden
 
hallo,

Zitat:

oder mit Hilfe von Delphi.
erst alle IDs holen, die es gibt, dann Liste mit IDs generieren die es geben sollte. Aus der Sollliste alles löschen was in der IstListe ist. Übrig bleiben die Lücken.
Also ich würde auch behaupten, mit reinem deskriptiven SQL ist das nicht möglich. Das wäre so, als würde ich zum Bäcker gehen und sagen "Geben Sie mir mal bitte alle Brotsorten, die Sie nicht führen". Ich müsste ja zumindestens in einer anderen Tabelle definieren, welche Schlüssel vorhanden sein müssten.

Falls jemand doch noch eine SQL-Lösung findet, wäre ich sehr gespannt.

mfg


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

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