Supportnet / Forum / Datenbanken
Wie kann ich den Inhalt eines Feldes vom nächsten Datensatz in den nächsten Datensatz übernehmen und zwar solange, bis ein neuer Inhalt des Datenfeld
Frage
Ich habe eine Access Tabelle, wo z.b: unter anderm Namen aufgeührt sind. Problem :
Nicht jeder Datensatz enhält den Namen: Bsp:
Feld 1: Name Feld2: Datum:
Anne 22.12.2008
22.12.2008
22.12.2008
Martin 22.12.2008
22.12.2008
Susanne 22.12.2008
22.12.2008
Die dazwischenligenden Felder zwischen Anne und Martin sollen mit Martin aufgefüllt werden und zwischen Martin und Susanne mit martin usw.
Kann mir jemand helfen in VBA ?
Antwort 1 von lorf55
Hallo Lutz,
um alle leeren Felder mit Martin aufzufüllen versuche es doch mal mit einer Aktualisierungsabfrage:
Wenn die Namen so bei dir sind, kannst du diesen SQL-String kopieren und über
Abfragen - Neu - Entwurfsansicht - Schließen - SQL - Strg+V
einfügen, speichern und mit Doppelklick auf den Namen ausführen.
Ansonsten musst du den Namen der Tabelle und des Feldes anpassen.
Oder man schreibt in ein Makro:
Oder man macht es völlig mit VBA. Das könnte denn so aussehen:
Ich bevorzuge die 1. Variante, d.h. ich nehme VBA nur wenn ich muss.
Gruß
lorf
um alle leeren Felder mit Martin aufzufüllen versuche es doch mal mit einer Aktualisierungsabfrage:
UPDATE Tabelle SET Feld1 = "Martin"
WHERE isNull(Feld1);Wenn die Namen so bei dir sind, kannst du diesen SQL-String kopieren und über
Abfragen - Neu - Entwurfsansicht - Schließen - SQL - Strg+V
einfügen, speichern und mit Doppelklick auf den Namen ausführen.
Ansonsten musst du den Namen der Tabelle und des Feldes anpassen.
Oder man schreibt in ein Makro:
Sub Makro1()
CurrentDB.Execute ("UPDATE Tabelle SET Feld1 = ""Martin"" WHERE isNull(Feld1);)
end subOder man macht es völlig mit VBA. Das könnte denn so aussehen:
Private Sub FeldUpdate()
Dim rstTabelle As ADODB.Recordset
Dim fldName As Field
' Ein Datensatz
Set rstTabelle= New ADODB.Recordset
' Öffnen des Datensatzes
rstTabelle.Open "Tabelle", CurrentProject.Connection, _
adOpenStatic, adLockOptimistic
With rstTabelle
While Not .EOF ' Solange kein Tabellenende
For Each fldName In .Fields ' Für jeden Datensatz
If fldName.Name = "Feld1" Then ' Wert prüfen im Namenfeld
If isEmpty(fldFullName.Value) Then ' Prüfen ob es leer ist
.Fields("Feld1") = "Martin" ' neuer Wert
.Update ' neuen Wert speichern
End If
End If
Next
.MoveNext
Wend
End With
rstTabelle.Close
Set rstTabelle = Nothing
End SubIch bevorzuge die 1. Variante, d.h. ich nehme VBA nur wenn ich muss.
Gruß
lorf
Antwort 2 von lorf55
Variante 2 sollte so aussehen:
Mit Gänsefuß am Ende ist schöner ;).
Sub Makro1()
CurrentDB.Execute "UPDATE Tabelle SET Feld1 = ""Martin"" WHERE isNull(Feld1);"
end subMit Gänsefuß am Ende ist schöner ;).
Antwort 3 von Lutz_53
Hi Jorf,
das klingt schon sehr gut, hat aber einen Haken. Diese Routine funkitioniert nicht in meinem Fall.
Ich möchte, dass die Rotuine die Datensätze automatisch updated , wo keine Namen existieren.
Ausserdem wird es so sein, dass die Reihenfolge der Namen
unterscheidlich sein kann oder sogar ganz andere Namen
erscheinen.
Bsp: derzeitige problematik
1. Datensatz Feldinhalt :Martin
2. Datensatz Feldinhalt : kein Eintrag
3. Datensatz Feldinhatl : Susanne
4. Datensatz Feldinhalt : kein Eintrag
5. Datensatz Feldinhalt : kein Eintrag
6. Datensatz Feldinhalt Ralf
7. Datensatz Feldinhalt : kein Eintrag
Bsp: Lösung der Problematik
1. Datensatz Feldinhalt :Martin
2. Datensatz Feldinhalt :Martin
3. Datensatz Feldinhatl : Susanne
4. Datensatz Feldinhalt : Susanne
5. Datensatz Feldinhalt : Susanne
6. Datensatz Feldinhalt Ralf
7. Datensatz Feldinhalt : Ralf
Vielleicht hast du da auch eine VBA Lösung .
Vielen Danke für Deine Bemühungen im Voraus.
Grüße
Lutz
das klingt schon sehr gut, hat aber einen Haken. Diese Routine funkitioniert nicht in meinem Fall.
Ich möchte, dass die Rotuine die Datensätze automatisch updated , wo keine Namen existieren.
Ausserdem wird es so sein, dass die Reihenfolge der Namen
unterscheidlich sein kann oder sogar ganz andere Namen
erscheinen.
Bsp: derzeitige problematik
1. Datensatz Feldinhalt :Martin
2. Datensatz Feldinhalt : kein Eintrag
3. Datensatz Feldinhatl : Susanne
4. Datensatz Feldinhalt : kein Eintrag
5. Datensatz Feldinhalt : kein Eintrag
6. Datensatz Feldinhalt Ralf
7. Datensatz Feldinhalt : kein Eintrag
Bsp: Lösung der Problematik
1. Datensatz Feldinhalt :Martin
2. Datensatz Feldinhalt :Martin
3. Datensatz Feldinhatl : Susanne
4. Datensatz Feldinhalt : Susanne
5. Datensatz Feldinhalt : Susanne
6. Datensatz Feldinhalt Ralf
7. Datensatz Feldinhalt : Ralf
Vielleicht hast du da auch eine VBA Lösung .
Vielen Danke für Deine Bemühungen im Voraus.
Grüße
Lutz
Antwort 4 von lorf55
Solches Vorgehen ist natürlich nicht die reine Lehre, aber wenn du es so willst....
Denn kannst du wirklich nur die 3.Variante nehmen. Zunächst fügst du oben in die Leerzeile ein
Die Schleife änderst du in:
damit bei jedem Durchlauf AktuellerName sich den Namen merkt, um ihn im nächsten Durchlauf weiter zu geben.
Ich habe das jetzt nicht getestet, aber wird schon funken.
Ich bin doch das Funkenmariechen ;-)
Gruß
lorf
Denn kannst du wirklich nur die 3.Variante nehmen. Zunächst fügst du oben in die Leerzeile ein
Dim AktuellerName as String
AktuellerName = "Standard"Die Schleife änderst du in:
For Each fldName In .Fields ' Für jeden Datensatz
If fldName.Name = "Feld1" Then ' Wert prüfen im Namenfeld
If isEmpty(fldFullName.Value) Then ' Prüfen ob es leer ist
.Fields("Feld1") = AktuellerName ' neuer Wert
.Update ' neuen Wert speichern
else
AktuellerName = .Fields("Feld1") ' der 1. Name MUSS da sein
End If
End If
Next
damit bei jedem Durchlauf AktuellerName sich den Namen merkt, um ihn im nächsten Durchlauf weiter zu geben.
Ich habe das jetzt nicht getestet, aber wird schon funken.
Ich bin doch das Funkenmariechen ;-)
Gruß
lorf

