Hallo Zusammen,
ich bin immer wieder hoch erfreut, wie gut und schnell einem hier geholfen wird. Und ich glaube, mein nächstes Problem ist gar nicht so schwer zu lösen, aber ich kenne die VBA Prozedur dafür nicht.
Ausgangszustand
Eine Tabelle enthält im Feld ,,Index" teilweise gleiche Werte
ID Feld1 Index
12 Blabla12 0
34 Blabla34 1
4 Blabla4 2
7 Blabla7 1
8 Blabla8 3
17 Blabla17 2
Zielzustand
Diese Werte sollen aufgelöst und in eine Reihenfolge gebracht werden. Dabei gibt es keinerlei Sortierungsvorgaben (z.B. ein ORDER BY ID) zu beachten. Es müssen lediglich die alten Zahlen gelöscht und in Neue umgewandelt werden, die dann aber nur einmal vorhanden sind und in einer Reihenfolge stehen.
ID Feld1 Index
12 Blabla12 0
34 Blabla34 1
4 Blabla4 2
7 Blabla7 3
8 Blabla8 4
17 Blabla17 5
Weiß jemand, wie das geht?
Vielen Dank im Voraus!
Holger
Im einfachen Fall gönnst Du Deiner Tabelle ein zusätzliches Autwert-Feld. Damit hast Du sofort die Nummerierung in Folge. Mit dem Index-Feld kannst Du machen, was Du willst, von weglassen bis parallel laufen lassen.
Vielen Dank für die Anregung, Eberhard
AutoWert funktioniert ja bei leeren Tabellen bzw. wenn ein Datensatz nach dem anderen dazu kommt. Die Tabelle ist aber schon existent. Du meinst also, die bereits vorhandene Tabelle müsste dazu in eine neue kopiert werden, bei der das Feld Index ein AutoWert-Feld ist?
Ich suche ehrlich gesagt nach einer VBA-Prozedur mit einer entsprechenden UPDATE-SET-Anweisung für das Feld Index, welche die vorhandenen Werte einfach fix durch eine Reihenfolge ersetzt. Gibt es sowas?
ZitatDu meinst also ...
Ein Feld kann auch nachträglich ergänzt werden, per Hand oder auch per Code.
Ist und bleibt das Einfachste. Zum Beispiel DDL:
ALTER TABLE
mytable ADD COLUMN
myfield COUNTER(1, 1)ZitatUPDATE-SET-Anweisung
... über die ganze Spalte ist dramatisch schwierig bis unmöglich. Denkbar wäre eine Schleife per VBA, wo alle Inhalte durchgerattert werden, so Stück für Stück.
Zitatehrlich gesagt
Ehrlichkeit finde ich gut, besser als Lügen oder Phantasieren.
Die Sache mit AutoWert-Feld ist für mich irgendwie nicht so prickelnd.
Nun, ich denke aber, ich habe die passende Lösung für mich gefunden.
Eine Update-Schleife mit Hilfe eines Recordsets liefert genau das Ergebnis, welches ich haben möchte.
Trotzdem vielen Dank Eberhard für's Mitdenken
Public Function IndexNumber()
Dim sql As String
Dim rs As DAO.Recordset
Dim i As Integer
i = 0
sql = "SELECT Index FROM tblXYZ;"
Set rs = CurrentDb.OpenRecordset(sql)
Do Until rs.EOF
rs.Edit
rs.Fields("Index") = i
i = i + 1
rs.Update
rs.MoveNext
Loop
End Function