Access-o-Mania

Access-Forum => Access-Hilfe => Thema gestartet von: Canarito am November 10, 2021, 22:25:55

Titel: Programm funktioniert nur beim ersten Mal
Beitrag von: Canarito am November 10, 2021, 22:25:55
Durch Anklicken und Aktualisierung eines logischen Feldes wird ein Programm aufgerufen. Dieses läuft problemlos beim allerersten Mal. Bei weiteren Aufrufen wird lediglich das Feld aktualisiert, der Programmablauf wird ignoriert. Hat jemand eine Idee ?
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: MzKlMu am November 11, 2021, 07:51:28
Hallo,
und wie genau (Code) ist das realisiert ?
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: ebs17 am November 11, 2021, 08:27:24
ZitatHat jemand eine Idee ?
Das beschriebene Verhalten wird gewünscht und so programmiert sein.
Wenn Du andere Wünsche hast, musst Du umprogrammieren.
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: Beaker s.a. am November 11, 2021, 14:52:41
Kann es mir nicht verkneifen
ZitatDie Antwort auf die Große Frage ..."
,,Ja...!"
,,... nach dem Leben, dem Universum und allem ..."
,,Ja ...!"
,,... lautet ..."
,Ja ...!"
,,... lautet ..."
,,Ja ...!!! ... ??"
,,Zweiundvierzig."
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: Canarito am November 11, 2021, 22:28:05
Hallo MzKIMU, hier der Code:

Private Sub Rgzurueck_AfterUpdate()
Dim db As DAO.Database
Set db = Application.CurrentDb
Dim rst0 As DAO.Recordset
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT rgnr_act, zaehler from tbl_rgnr_actual")
Set rst0 = CurrentDb.OpenRecordset("SELECT rgnr, orgfactura, rgzurueck, rgdatum from tbl_auftrag")
Dim Mrgnr As Variant
rst0.MoveLast
Do While rst0.Fields(3) = Date
If rst0.Fields(2) = True And rst0.Fields(3) = Date Then
rst0.Edit
    Mrgnr = rst0.Fields(0)
    If rst0.Fields(1) = 0 Then
    rst0.Edit
        rst0.Fields(1) = rst0.Fields(0)
    rst0.Update
        rst.MoveFirst
        rst.Edit
        rst.Fields(0) = Mrgnr
        rst.Fields(1) = rst.Fields(1) + 1
        rst.Update
    End If
    rst0.Edit
        rst0.Fields(0) = 0
    rst0.Update
End If
rst0.MovePrevious
Loop
Set rst = Nothing
Set rst0 = Nothing
Set db = Nothing
End Sub
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: Canarito am November 11, 2021, 22:30:10
Hallo ebs17,
wenn das Programmverhalten so gewünscht wäre, hätte ich kein Problem und würde mich nicht an Euch wenden.
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: Canarito am November 11, 2021, 22:32:38
Hallo Beaker s.a.,
meinst Du wirklich, Dein Kommentar sei in irgendeiner Hinsicht konstruktiv oder hilfreich? Ich wende mich an Euch, weil ich ein Problem habe und nicht, weil ich Unterhaltung brauche.
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: Xoar am November 12, 2021, 11:14:59
Setz mal in VBA nen Haltepunkt am Anfang der Sub und schaue warum er beim zweiten Mal überspringt. Mit F8 gehst Du immer ein Schritt weiter.

Sollte der Haltepunkt nicht angesprochen werden, ist evtl. das Ereignis falsch.

Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: ebs17 am November 12, 2021, 12:07:46
Programmablauf ...?
ZitatDo While rst0.Fields(3) = Date
If rst0.Fields(2) = True And rst0.Fields(3) = Date Then ...
Die Schleife wird nur ausgeführt, wenn Tabellendaten die Bedingungen erfüllen, wobei die markierte Doppelprüfung zusätzlich wenig Sinn macht.
Also müsstest Du Deine realen Tabellendaten in eine Betrachtung einbeziehen.

Im Recordset rst wird immer der eine Datensatz bearbeitet. Wenn sich da ein Eingangswert nicht ändert, ist das ein Überschreiben mit sich selbst, womit man kaum eine Änderung bemerken wird.

Dim db As DAO.Database
Set db = Application.CurrentDb
Wofür dieses? Benutzt wird die Variable nicht.

Dafür fehlt das Schließen der Recordsets, was sich "plötzlich und überraschend" als Problem hinzugesellen könnte.
Den eigentlichen Sinn der Maßnahme kann man nicht beurteilen.
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: Canarito am November 13, 2021, 14:05:42
Danke für die Anregungen!
Das logische Feld, das angeklickt wird, um es auf TRUE zu setzen, ruft gleichzeitig die Prozedur auf. Ich habe festgestellt, dass die Prozedur aufgerufen wird nach Anklicken des Feldes aber VOR dessen Aktualisierung, obwohl sie laut Programmierung aufgerufen werden soll "nach Aktualisierung". Ich finde den Fehler nicht!
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: ebs17 am November 13, 2021, 14:47:36
In Deinen Recordsets fragst Du Werte aus Tabellen ab. Die Aktualisierung des Wertes eines gebundenen Steuerelements im Formular wird aber nicht unmittelbar in der Tabelle gespeichert.

Gespeichert werden immer Datensätze, automatisch z.B. bei Datensatzwechsel. Notfalls muss man eine Speicherung explizit veranlassen, um sofort mit dem geänderten Wert arbeiten zu können:
' erste Zeile im Code
If Me.Dirty Then Me.Dirty = False
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: Canarito am November 13, 2021, 21:19:48
Hallo Eberhard,
if Me.[...] then me.[...] = TRUE
mit anschliessendem REFRESH
funktioniert! Vielen Dank für Eure Hilfe !!!
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: Canarito am November 13, 2021, 21:44:40
Da habe ich mich zu früh gefreut. Beim ersten Mal funktionierte es perfekt, danach wieder das selbe wie vorher.
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: MzKlMu am November 14, 2021, 19:33:46
Hallo,
was ist denn die eigentliche Aufgabe des Codes?
Möglicherweise lässt sich diese ja mit einer einfacheren Methode erledigen.
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: Canarito am November 20, 2021, 22:55:42
Ich habe das Problem gefunden, allerdings noch keine Lösung. Es sollen nur Datensätze des heutigen Tages gesucht und bearbeitet werden. Beim ersten Durchlauf funktioniert es einwandfrei. Allerdings wird an irgendeiner Stelle aus mir bisher unbekannten Gründen das Datum des Datensatzes überschrieben mit dem Datum plus der Uhrzeit. Bei nochmaligem Durchlauf ist dann das Datum der Tabelle <> DATE, woraus der Fehler resultiert. Das ist auch nicht zu verhindern durch Definieren des Datums der Tabelle als kurzes Datum ohne Uhrzeit.
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: ebs17 am November 21, 2021, 13:25:06
ZitatEs sollen nur Datensätze des heutigen Tages gesucht und bearbeitet werden
Das würde man bereits in der Abfrage mit passendem Filter zur Erstellung des Recordsets berücksichtigen. Dann arbeitet man direkt mit der Ergebnismenge und sucht nicht in der Gesamtmenge herum - was schon mal eine einfache Überlegung für Performance ist, unabhängig von sonstigen Fehlern, die man machen kann.

ZitatDefinieren des Datums der Tabelle als kurzes Datum ohne Uhrzeit
Das geht nicht. Ein Feld des Typs Date kann immer Datums- und Zeitanteil aufnehmen. Wenn man sich Format nur den Tagesanteil zeigen lässt, sind trotzdem Zeitanteile möglich. Die Sonne scheint auch, wenn es bei Dir Nacht ist und Du sie nicht sehen kannst.

Wenn im Feld Zeitanteile vorhanden sein können, dann berücksichtigt der Test auf Gleichheit zu einem Datum nur den Augenblick 0:00:00 Uhr zu diesem Datum.

Zitataus mir bisher unbekannten Gründen das Datum des Datensatzes überschrieben mit dem Datum plus der Uhrzeit
Diese Unbekanntheit solltest Du auflösen. Fehler, die man nicht macht, muss man nicht lösen.
Titel: Re: Programm funktioniert nur beim ersten Mal
Beitrag von: Beaker s.a. am November 21, 2021, 18:29:06
Zitatan irgendeiner Stelle
Diese Stelle findet man am schnellsten per Einzelschrittmodus.