Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Laufende Nummer per SQL Update möglich? (https://www.delphipraxis.net/213115-laufende-nummer-per-sql-update-moeglich.html)

HCB 29. Mai 2023 11:44

Datenbank: Access • Version: 2003 • Zugriff über: SQL / Delphi FireDac

Laufende Nummer per SQL Update möglich?
 
Hallo, ich versuche die Datensätze in einer Stückliste zu aktualisieren z.B wenn ein Datensatz gelöscht wurde.

Beispiel:
Datensatz 1 StckListLfdNr 0
Datensatz 2 StckListLfdNr 1
Datensatz 3 StckListLfdNr 2 usw.

wenn ich jetzt den Datensatz 2 lösche sollte aktualisiert werden, damit es dann so aussieht:

Datensatz 1 StckListLfdNr 0
Datensatz 3 StckListLfdNr 1

Irgendwie funktioniert es hiermit nicht:
update StckList set StckListLfdNr = StckListLfdNr-1 where StckListNr ='1013030';

Wenn jemand mir auf die Sprünge helfen kann wäre ich sehr dankbar, da ich blutiger Anfänger bin.

LG Harry

Uwe Raabe 29. Mai 2023 15:09

AW: Laufende Nummer per SQL Update möglich?
 
Dein Code verändert auch die 0. Versuch es mal hiermit.
SQL-Code:
update StckList set StckListLfdNr = StckListLfdNr-1 where StckListNr ='1013030' AND StckListLfdNr > 2;

HCB 30. Mai 2023 15:12

AW: Laufende Nummer per SQL Update möglich?
 
Hallo Uwe,
mit dem SQL script erhalten alle Artikel den gleichen wert. Es wird nicht durchnummeriert.

LG Harry

Uwe Raabe 30. Mai 2023 15:24

AW: Laufende Nummer per SQL Update möglich?
 
Es wird damit auch nicht durchnummeriert, sondern die nur die Lücke geschlossen. Wenn die Nummerierung vorher nicht stimmt, dann nach dem Script natürlich auch nicht.

Generell wäre ein Beispiel zum Reproduzieren empfehlenswert.

HCB 30. Mai 2023 15:34

AW: Laufende Nummer per SQL Update möglich?
 
Kann man denn generell einfach z.B. 10 Datensätze per Access-SQL durchnummerieren lassen?
Wenn ja, wie würde das SQL aussehen?

LG Harry

Phoenix 30. Mai 2023 15:43

AW: Laufende Nummer per SQL Update möglich?
 
Du brauchst ein Kriterium nachdem Du die Datensätze sortieren kannst.
Und dann kannst Du ROW_NUMBER() verwenden um die Zeilennummer der Sortierten Liste (innerhalb des Queries) zu erhalten und damit dann die Laufende Nummer neu zu befüllen.

himitsu 30. Mai 2023 17:09

AW: Laufende Nummer per SQL Update möglich?
 
[deleted]

TigerLilly 30. Mai 2023 17:50

AW: Laufende Nummer per SQL Update möglich?
 
Zitat:

Zitat von HCB (Beitrag 1522899)
Kann man denn generell einfach z.B. 10 Datensätze per Access-SQL durchnummerieren lassen?
Wenn ja, wie würde das SQL aussehen?
LG Harry

Google spuckt dazu zB dieses aus:
https://www.huegemann-informatik.de/...ccess-tabellen

Bzw DCount
https://support.microsoft.com/de-de/...a-11a64acbf3d3

Hilft das?

blawen 30. Mai 2023 18:03

AW: Laufende Nummer per SQL Update möglich?
 
Wenn ich es richtig interpretiere, geht es um eine Stückliste, bei welcher die jeweils nächste freie Positionsnummer vergeben, bzw. die Sortierung angepasst werden soll.

Meistens sind doch Positionsnummern auch noch mit anderen Dokumenten/Zeichnungen verknüpft.
Spielt dies in Deinem Fall keine Rolle?

jobo 30. Mai 2023 21:15

AW: Laufende Nummer per SQL Update möglich?
 
Als reines SQL suchst Du nach einem korrelierten Update (correlated Update).

Hier ist soetwas für Access aufgeführt(Englisch).
https://stackoverflow.com/questions/...uery-in-access

..UPDATE VendorRegKeys
INNER JOIN Users..
In Deinem Fall wäre es ungefähr ein Selfjoin. Du brauchst ein Select, das alle die Datensätze wiedergibt, die Du updaten möchtest.

HCB 31. Mai 2023 14:27

AW: Laufende Nummer per SQL Update möglich?
 
Hallo an Alle,
ich dachte es gäbe eine einfache und schnelle SQL Möglichkeit....

Nun werde ich es so lösen:

for i:= 0 to T_StckList.RecordCount-1 do
begin
T_StckList.Edit;
T_StckList.FieldByName('StckListLfdNr').Value:=i;
T_StckList.next;
end;

LG Harry

freejay 31. Mai 2023 15:36

AW: Laufende Nummer per SQL Update möglich?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1522873)
Dein Code verändert auch die 0. Versuch es mal hiermit.
SQL-Code:
update StckList set StckListLfdNr = StckListLfdNr-1 where StckListNr ='1013030' AND StckListLfdNr > 2;

Doch, das Beispiel funktioniert. Habe ich gerade ausprobiert. Hätte mich auch gewundert, wenn nicht.

Uwe Raabe 31. Mai 2023 15:57

AW: Laufende Nummer per SQL Update möglich?
 
Das funktioniert aber nur, wenn die Voraussetzungen stimmen: Die StckListLfdNr ist fortlaufend vergeben und der Datensatz mit der Nummer 2 wird gelöscht. Das ist aber offenbar nicht immer der Fall.

freejay 31. Mai 2023 16:00

AW: Laufende Nummer per SQL Update möglich?
 
Ist schon klar, dass man die Parameter entsprechend anpassen muss. Aber in dem geschilderten Beispiel funktioniert das problemlos. Der Thread-Ersteller meinte ja, das würde nicht funktionieren.

himitsu 31. Mai 2023 16:23

AW: Laufende Nummer per SQL Update möglich?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1522936)
Das funktioniert aber nur, wenn die Voraussetzungen stimmen:

und es kein UNIQUE/SERIAL auf diesem Feld gibt. ansonsten müsste man vielleicht die Reihenfolge der Daten umdrehen.

HolgerX 2. Jun 2023 12:37

AW: Laufende Nummer per SQL Update möglich?
 
Hmm..

Wir machen etwas ähnliches...

Hier mal ein Muster Query:

Code:
UPDATE x
 SET x.[StckListLfdNr] = x.[Row#]
 FROM (
   SELECT [StckListLfdNr], ROW_NUMBER() OVER (ORDER BY [StckListLfdNr] ASC) AS Row#
   FROM [StckList]
   WHERE StckListNr ='1013030'
 ) x
Damit würden alle StckListLfdNr neu mit 1 beginnend vergeben werden, bei denen StckListNr ='1013030' ist.
Die Sortierungsreihenfolge ist dann die alte StckListLfdNr..


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.

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