Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

zum letzten Datensatz nach Requery (nochmals...)

Begonnen von JonnyMM, Mai 10, 2014, 15:56:05

⏪ vorheriges - nächstes ⏩

JonnyMM

Liebe Access-Experten,
seit gestern quäle ich mich (Anfänger) erfolglos mit dem schon oft behandelten Problem, nach einem Requery auf den zuletzt aktiven Datensatz zurückzukommen (im Formular mit 2 Registerblättern für Tabellen- und Einzeldatensatzansicht). Habe endlos gesucht und versucht, die hier und u. z. B. bei DonKarl empfohlene Methode (FindFirst und Bookmark) zu realisieren. Es will einfach nicht funktionieren. Ich lande immer wieder bei Satz 1. Vielleicht kann mir jemand auf die Sprünge helfen. Vermutlich stimmt mit dem Befehl Me.Frm_Qry_GesamtDaten_Tbl.Form.Bookmark = rs.Bookmark irgendetwas nicht (s. beiligender Code). Die Zeile wird auch angesprochen, bewirkt aber nicht das Gewünschte.
Me![Chb_Verworfen1] zeigt im Formular an, ob in der Tabelle "Verworfen" True oder False ist.
Seltsamerweise hat in einer früheren Programmversion das Requery auf die Checkbox funktioniert, ohne das auf Datensatz 1 gesprungen wurde. Woran das liegt ist mir unklar.
Vielen Dank im Voraus
Private Sub Cmd_SatzZurueck1_Click()
' soll Löschmarkierung aus Tabelle auf False setzen und in einer anderen Tabelle korrespondierenden
' Datensatz löschen

Dim SatzNr As Long

'On Error GoTo Err_Cmd_SatzZurueck1_Click
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
   
    Set db = CurrentDb()
    ' im Registerblatt mit Tabellenansicht angezeigter Datensatz: Satz-ID der Tabelle abfragen
    SatzNr = Me.Frm_Qry_GesamtDaten_Tbl.Form.ID
    ' auf Ursprungstabelle zugreifen
    Set rs = db.OpenRecordset("Tbl_Gesamtdaten", dbOpenDynaset)
    rs.FindFirst "ID= " & SatzNr  ' zum Datensatz mit der betreffenden ID springen
 
    rs.Edit
    rs!Verworfen = False           ' Häkchen im TabellenFeld Verworfen entfernen
    rs.Update
        'auf Tabelle mit Infos zu DAtensätzen mit Löschmarkierung zugreifen
    Set rs = db.OpenRecordset("Tbl_Verworfen", dbOpenDynaset)
    rs.FindFirst "ID_Daten= " & SatzNr  ' zum DAtensatz mit der betreffenden Fremd-ID springen
    rs.Delete                           'Satz löschen
         ' Schalter ausgrauen/aktivieren und Formular-Checkbox neu abfragen
    Me!Cmd_VerwerfenMain.Enabled = True
    Me!Cmd_SatzZurueck1.Enabled = 0

    Me![Chb_Verworfen1].Requery ' springt zum ersten Satz in der Datenquell (beide Registerblätter)
    'zurück zum Satz mit ID = SatzNr.....
    Set rs = Me!Frm_Qry_GesamtDaten_Tbl.Form.RecordsetClone
    rs.FindFirst "ID = " & SatzNr

If rs.NoMatch Then ' zu Testzwecken
     MsgBox "Nicht gefunden = " & SatzNr 'trifft nie zu
Else
     Me.Frm_Qry_GesamtDaten_Tbl.Form.Bookmark = rs.Bookmark
        'bewirkt keinen Rücksprung zu SatzNr
End If
     
    Set db = Nothing
    Set rs = Nothing

Exit_Cmd_SatzZurueck1_Click:
Exit Sub

Err_Cmd_SatzZurueck1_Click:
    MsgBox Err.Description
    Resume Exit_Cmd_SatzZurueck1_Click

End Sub

JonnyMM

Weiteres Probieren hat ergeben: Wenn ich Requery weglasse und stattdessen mit der Maus in den Detailbereich des Formulars außerhalb von Controls klicke, wird die Chkbox aktualisiert (und die daran hängende bedingte Formatierung umgesetzt) und der Datensatz nicht verlassen - so sollte es sein! Wenn ich wüsste, wie man das per VBA umsetzt, wäre mir geholfen. Versuche mit SetFocus haben bislang nichts gebracht.
Beste Grüße

MaggieMay

Hi,

vielleicht genügt ja auch Me.Frm_Qry_GesamtDaten_Tbl.Form.Refresh
Freundliche Grüße
MaggieMay