online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Lutz_53 vom 25.11.2020, 09:21 Options

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

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 schreiben

Antwort 1 von lorf55 vom 25.11.2020, 13:51 Options

Hallo Lutz,
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 sub


Oder 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 Sub


Ich bevorzuge die 1. Variante, d.h. ich nehme VBA nur wenn ich muss.

Gruß
lorf

Antwort 2 von lorf55 vom 25.11.2020, 14:02 Options

Variante 2 sollte so aussehen:

Sub Makro1()
CurrentDB.Execute "UPDATE Tabelle SET Feld1 = ""Martin"" WHERE isNull(Feld1);"
end sub


Mit Gänsefuß am Ende ist schöner ;).

Antwort 3 von Lutz_53 vom 25.11.2020, 16:01 Options

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

Antwort 4 von lorf55 vom 25.11.2020, 20:18 Options

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

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

Ähnliche Themen

Neuer Datensatz einfügen"Abschalten"
FranzPop  11.10.2007 - 153 Hits - 1 Antwort

Datensatz duplizieren
Turion64  15.11.2007 - 165 Hits - 1 Antwort

Datensatz aus Tabelle ansprechen
Iduna  19.05.2008 - 46 Hits - 1 Antwort

Neuer Datensatz anlegen
morpheus__85  23.07.2008 - 38 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026