Tabelle bereinigen und neu sortieren

hallo liebes Forum,
ich würde gerne eine Tabelle am Ende des Jahres "bereinigen", soll heißen leere Datensätze zu löschen und den Index (ID) neu aufbauen. Im Endeffekt reduziert sich das Problem auf eine Tabellen (mit verknüpfter Tabelle) neu zu sortieren, also den Datensatz ID=1 mit einen anderen Datensatz zu überschreiben...etc. Wichtig: keine Ansicht, die ursprüngliche Tabelle soll umsortiert werden. Im 1. Bild Nr 1 Auto soll durch die Nr 4 Flugzeug ersetzt werden...(gem. Sortierung1)
Wenn ich einen Testcode in der Konsole laufen lasse zeigt sie mir das richtige Ergebnis an:
let c:= 1;
let x:= select Master;
for i in x order by Sortierung1 do
let j:= select Master where(Nr) =c;
c:=c+1;
j.Artikel +"-->"+ i.Artikel;
end
Ergebnis:
Auto-->Flugzeug
Motorrad-->Schiff
Schiff-->Auto
Flugzeug-->Motorrad
wenn ich die Zeile 6 wie folgt ändere (j.Artikel := i.Artikel;) und daher zu einem ausführbaren Code mache passiert folgendes: - siehe 2. Bild
Es scheint, dass die Variable x kein Array im Speicher erzeugt, sondern nur einen Verweis auf die originale Tabelle und wenn diese dann verändert wird, kommt Nonsense raus.
Habt ihr einen Idee? Eine Möglichkeit wäre eine leere Kopie zu erstellen und dann die Kopie sortiert zu befüllen und dann wieder retour speichern, aber das ist ja wohl super umständlich...
Anbei eine Kopie der DB zum probieren
lieben Dank
2 Antworten
-
Ich weiß nicht, ob ich dein Anliegen richtig verstehe, aber bei dem Wert in der Spalte 'Nr' handelt es sich um die Datensatznummer als Zahl. Sie ist Teil der Datensatz-ID, wird von Ninox automatisch vergeben und lässt sich nicht verändern. Löscht man einen Datensatz, so wird dessen ID/Nr nicht neu vergeben. Das ist insofern wichtig, als auch Verknüpfungen über die ID verwaltet werden.
Um also eine Tabelle mit gelöschten Datensätzen neu aufzubauen, so dass 'Nr' wieder bei 1 beginnt und keinerlei Lücken enthält, müsste man die Daten tatsächlich in eine neue Tabelle schreiben.
Besser ist es aber, statt dessen ein eigenes numerisches Datenfeld - bspw. 'LfdNr' - hinzuzufügen, das dann beliebig manipuliert werden kann. Dieses Feld kann statt der 'Nr' in der Tabellenansicht eingeblendet werden.
PS: Die beiden Screnshots zeigen übrigens dasselbe Bild.
Content aside
- vor 2 TagenZuletzt aktiv
- 2Antworten
- 55Ansichten
-
2
Folge bereits