Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: herb54 am August 15, 2018, 08:45:48

Titel: Kontrollkästchen deaktivieren (False)
Beitrag von: herb54 am August 15, 2018, 08:45:48
Hallo,
ich möchte über eine Routine mehrere Kontrollkästchen deaktivieren (auf False setzen).
Dies geschieht über einen Button und über ein Recordset:

'Programmauszug
Private Sub Befehl90_Click()
Dim xs As DAO.Recordset
Set xs = CurrentDb.OpenRecordset("Therapie_neu")

'Eingabe erlauben
Me.AllowEdits = True
Me.AllowAdditions = True
Me.AllowDeletions = True

'Alle Selektionskästchen der Belege löschen
If xs.RecordCount > 0 Then
Do Until xs.EOF
xs.Edit
xs!Bel1 = False
xs!Bel2 = False
xs!Bel3 = False
xs!Bel4 = False
xs!Bel5 = False
xs!bel6 = False
xs!bel7 = False
xs.Update
xs.MoveNext
Loop
End If
xs.Close
Set xs = Nothing

DoCmd.RunCommand acCmdSaveRecord
Me.Refresh

End Sub

Leider deaktivieren sich die Kontrollkästchen erst nach zweimaligem Klicken des Buttons!
Was ist hier falsch?
PS:
Wenn ich die Kontrollkästchen nicht über ein Recordset  sondern manuell
(Me.Bel1 = False usw.) deaktiviere geht es einwandfrei.

Im Voraus vielen Dank
Herbert
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: ebs17 am August 15, 2018, 08:55:26
Über das Recordset werden Daten in der Tabelle geändert.
Das Formular zeigt aber ohne Requery noch den vorherigen Zustand an, und ggf. änderst Du über das Formular einen Datensatz in der Tabelle zurück.

Was würde man tun:
- Aktualisierungsabfrage verwenden, ist schneller und einfacher.
Anschließend mit Me.Requery die Datenherkunft des Formulars aktualisieren.
- Alle sonstigen Aktionen (Allow, SaveRecord) entfallen.
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: herb54 am August 15, 2018, 09:18:07
Hallo ebs17,
das Problem ist: Ich möchte, dass der Datenzeiger auf dem aktuellen Datensatz stehen bleibt. Mit Me.Requery springt der Datenzeiger auf den ersten Datensatz! Gibt es da eine Möglichkeit das zu verhindern?
Grüße
Herbert
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: DF6GL am August 15, 2018, 09:37:24
Hallo,

siehe hier:  http://www.donkarl.com/?FAQ4.5
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: MzKlMu am August 15, 2018, 09:41:02
Hallo,
und nicht zuletzt darf auch das Datenmodell bezweifelt werden.
7 Ja/Nein Felder sind ein Hinweis darauf.

Was steht denn in den 7 Feldern bzw. was wird denn da angehakt ?
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: herb54 am August 15, 2018, 10:45:35
Hallo Franz,
super, wieder was gelernt! Vielen Dank!

Hallo MzKlMu,
die Kontrollkästchen werden aktiviert um über eine Abfrage einen Bericht aufzurufen!

Grüße
Herbert
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: MzKlMu am August 15, 2018, 10:47:26
Hallo,
und was haben da die KK für eine Aufgabe ?
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: herb54 am August 15, 2018, 12:18:53
KK = True , dann werden über eine Abfrage Daten für einen Bericht bereitgestellt.
Ich habe den Requery eingebaut - leider immer noch das gleiche Problem: Ich muss den Button zweimal betätigen um die KK zu deaktivieren:

Private Sub Befehl90_Click()
Dim xs As DAO.Recordset
Set xs = CurrentDb.OpenRecordset("Therapie_neu")

'Eingabe erlauben
Me.AllowEdits = True
Me.AllowAdditions = True
Me.AllowDeletions = True

Dim lngStore As Long

'ID des Datensatzes speichern um nach einem Requery wieder auf den gleichen Datensatz zu springen
lngStore = Me!ID

'Bildschirmflackern reduzieren
Me.Painting = False

'Alle Selektionskästchen der Belege löschen
If xs.RecordCount > 0 Then
Do Until xs.EOF
xs.Edit
xs!Bel1 = False
xs!Bel2 = False
xs!Bel3 = False
xs!Bel4 = False
xs!Bel5 = False
xs!bel6 = False
xs!bel7 = False
xs.Update
xs.MoveNext
Loop
End If
xs.Close
Set xs = Nothing

'Datensatz über Requery im Formular und in der Tabelle speichern
Me.Requery

'Den aktuellen Datensatz wieder anspringen
Me.Recordset.FindFirst "Id = " & lngStore

Me.Painting = True

End Sub

Habe es auch am Ende des Recordset mit xs.Requery versucht, dann kommt eine Fehlermeldung "Mit diesem Objekt nicht möglich"
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: herb54 am August 15, 2018, 13:01:14
Habe jetzt eine Lösung gefunden, die einwandfrei geht (aber ohne Recordset):

Private Sub Befehl90_Click()
Dim xs As DAO.Recordset
'Set xs = CurrentDb.OpenRecordset("Therapie_neu")

'Eingabe erlauben
Me.AllowEdits = True
Me.AllowAdditions = True
Me.AllowDeletions = True

Dim lngStore As Long

'ID des Datensatzes speichern um nach einem Requery wieder auf den gleichen Datensatz zu springen
lngStore = Me!ID

'Bildschirmflackern reduzieren
Me.Painting = False

For i = 1 To 7
    Me.Controls("Bel" & i).Value = False
Next i

'Datensatz über Requery im Formular und in der Tabelle speichern

DoCmd.Requery 'Akutalisieren
Me.Refresh
DoCmd.RunCommand acCmdSaveRecord

'Den aktuellen Datensatz wieder anspringen
Me.Recordset.FindFirst "Id = " & lngStore

Me.Painting = True
End Sub

Im Prinzip das Gleiche wie das Recordset - nur wird das Formular sofort aktualisiert.
Das man das über Recordset nicht hinkriegt...???

Grüße
Herbert
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: Beaker s.a. am August 15, 2018, 13:25:04
Hallo Herbert,
Wenn du Eberhards Hinweise umgesetzt hättest, sollte das in etwa so aussehen
Private Sub Befehl90_Click()
    Dim lngStore As Long
    Dim sSQL As String

'ID des Datensatzes speichern um nach einem Requery wieder auf den gleichen Datensatz zu springen
    lngStore = Me!ID

    sSQL = _
            "UPDATE Therapie_neu " _
         & "SET Bel1 = False, " _
         & "SET Bel2 = False, " _
         & "SET Bel3 = False, " _
         & "SET Bel4 = False, " _
         & "SET Bel5 = False, " _
         & "SET Bel6 = False, " _
         & "SET Bel7 = False, " _
         & "WHERE ID = " & lngStore
Debug.Print sSQL    'zum Prüfen des Strings im Direktfenster

    CurrentDb.Execute sSQL, dbFailOnError

    Me.Requery

'Den aktuellen Datensatz wieder anspringen
    Me.Recordset.FindFirst "Id = " & lngStore

End Sub


gruss ekkehard
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: herb54 am August 15, 2018, 14:22:20
Hallo Ekkehard,
man lernt nie aus! Vielen Dank an dich und an alle in diesem Forum für die Hilfe!
Grüße
Herbert
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: ebs17 am August 15, 2018, 16:36:03
Falls es nicht explizit aufgefallen ist: Oben wurde über alle Datensätze des Formularrecordsets hergefallen, jetzt ist man zufrieden, wenn der aktuelle Datensatz verarbeitet wird. Solche Kleinigkeiten sollte man eigentlich gleich am Anfang herausstellen, ggf. nach vorheriger eigener reiflicher Überlegung.
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: Beaker s.a. am August 15, 2018, 17:07:57
@Eberhard
ZitatFalls es nicht explizit aufgefallen ist:
Ist es tatsächlich nicht :-(
Habe ich wohl durch das Zurücksetzen auf den letzten DS ausgeblendet.

@Herbert
Wenn also ALLE Datensätze der Tabelle aktualisiert werden sollen, musst
du die WHERE-Klausel entfernen.
Titel: Re: Kontrollkästchen deaktivieren (False)
Beitrag von: herb54 am August 16, 2018, 15:39:48
Ok vielen Dank!