euuser
Goto Top

Access 2010 vba Recordset

Hallo zusammen,

ich arbeite seit langem mal wieder mit Access und vba:

Ich habe eine Datenbank, zwei Tabellen (identisch aufgebaut) und ein Formular. Über eine Textbox ("SearchBox") und ein AfterUpdate-Ereignis suche ich (je nach Suchbegriff: "If SearchBox.Text Like "1*" Then") in einer der beiden Tabellen.
Wird etwas gefunden, wird ein optisches Feedback gegeben, wenn nicht, dann gibt es eine andere Meldung. Das funktioniert auch schon alles.
Jetzt möchte ich aber den gefundenen Datensatz anzeigen lassen und ein Attribut des Datensatzes ändern (Ja/Nein-Feld). Hier komme ich aber gerade nicht weiter.
Wie gesagt, die beiden Tabellen sind komplett identisch aufgebaut, haben nur unterschiedliche Namen.

Die Formularfelder für die Anzeige heißen: TFID, TFVorname, TFNachname, TFAktien, KKAnwesend (Kontrollkästchen)

Hier mal mein AfterUpdate-Ereignis:

Private Sub SearchBox_AfterUpdate()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim Frm As String
    Frm = "Formular"  
    Dim Tbl1 As String
    Tbl1 = "Tabelle1"  
    Dim Tbl2 As String
    Tbl2 = "Tabelle2"  
        
    Set dbs = CurrentDb
        
    ' MsgBox FrmName  
        
    If SearchBox.Text Like "1*" Then  
    Set rst = dbs.OpenRecordset(Tbl1, dbOpenDynaset)
    rst.FindFirst "[ID] = '" & Me!SearchBox & "'"  
        If rst.NoMatch Then
                Signal1Box.BackColor = vbRed
                Signal2Box.Value = "Keine Daten in " & Tbl1 & " gefunden!"  
                TFID.Value = ""  
                TFVorname.Value = ""  
                TFNachname = ""  
                TFAktien = ""  
                KKAnwesend.Value = ""  
            Else
                Form_Formular.RecordSource = Tbl1
                Set rst = Me.RecordsetClone
                rst.FindFirst "[ID] = '" & Me!SearchBox & "'"  
                Me.Bookmark = rst.Bookmark
                TFID.Value = "???"  
                TFVorname.Value = "???"  
                TFNachname = "???"  
                TFAktien = "???"  
                KKAnwesend.Value = ???
                Signal1Box.BackColor = vbWhite
                Signal2Box.Value = "O. K. !"  
                Signal1Box.BackColor = vbGreen
        End If

' #############################################  
' Ab hier wird auf die zweite Tabelle verwiesen... wird dann analog wie bei der ersten Tabelle aufgebaut sein  
' #############################################  
      
        
        Else
        Set rst = dbs.OpenRecordset(Tbl2, dbOpenDynaset)
        rst.FindFirst "[ID] = '" & Me!SearchBox & "'"  
        If rst.NoMatch Then
            MsgBox "Keine Daten in " & Tbl2 & " gefunden!"  
            Else
            MsgBox "Daten in " & Tbl2 & " gefunden!"  
        End If
    End If
    
Cleanup:
    rst.Close
    Set rst = Nothing
    Set dbs = Nothing
    
End Sub

Ich würde mich sehr über Hilfe, Ideen oder Denkanstöße freuen!

Vielen Dank!

VG
Felix

Content-ID: 240274

Url: https://administrator.de/contentid/240274

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

colinardo
Lösung colinardo 06.06.2014, aktualisiert am 07.06.2014 um 09:15:51 Uhr
Goto Top
Hallo Felix,
also ein Update in einer Spalte des jeweiligen gefundenen Datensatzes kannst du so machen:
'Edit Mode aktivieren (zum Bearbeiten von Feldern muss dieser aktiviert werden)  
rst.Edit

' Wert des Kontrollkästchens setzen  
rst!KKAnwesend = 1

' anderen Wert ändern  
rst!TFNachname = "Meier"  

'Datensatz speichern (hiermit wird der Datensatz in der Tabelle mit den neuen Daten aktualisiert)  
rst.Update
Die obige Schreibweise für das Update eines Feldes ist eine mögliche Variante, man kann es alternativ auch so schreiben:
rst.Fields("TFNachname").Value = "Meier"
Jetzt möchte ich aber den gefundenen Datensatz anzeigen lassen
hier gibt es einige Möglichkeiten, das kommt halt darauf an wie dein Formular aufgebaut ist, wo du es anzeigen lassen willst und in welcher Art (gefiltert / extra Dialog / nur Datensatz markieren/ etc.)
Wenn der Datensatz in der Datenquelle des aktuellen Forumlars gesucht werden soll kann man es so machen:
DoCmd.SearchForRecord , , acFirst, "ID = " & rs!ID
Grüße Uwe
EUuser
EUuser 06.06.2014 um 11:18:24 Uhr
Goto Top
Hallo Uwe,

vielen Dank für die Hilfe! Das ist genau das, was ich gesucht habe! Danke!
Die Anzeige des gefundenen Datensatzes mache ich dann über die Felder im Formular:
            rst.Edit
            rst.Fields("Anwesend").Value = 1  
            rst.Update
            TFID.Value = rst!ID
            TFVorname.Value = rst!Vorname
            TFNachname = rst!Nachname
            TFAktien = rst!Aktien
            KKAnwesend.Value = rst!Anwesend

Danke und Gruß!
Felix
colinardo
colinardo 06.06.2014 aktualisiert um 11:29:56 Uhr
Goto Top
Keine Ursache.
Zur Info, es gibt dafür auch noch eine andere Methode mit DLookup() um einen einzelnen Datensatz bzw. Feld zu suchen. Ein Beispiel dazu findest du gerade beantwortet hier: Werte, die zusammenhängen sollem immer im Formular eingetragen werden nach Eingabe des ersten Wertes

Vielleicht nutzt dir das in Zukunft mal irgendwann face-wink

Grüße Uwe