Neuigkeiten:

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

Mobiles Hauptmenü

Tabelle füllen und Bericht erstellen

Begonnen von Kutsche, November 03, 2025, 20:18:15

⏪ vorheriges - nächstes ⏩

Kutsche

Moin,
ich brauche mal wieder eure Hilfe.

In der beigefügten Datenbank gibt es eine neue Tabelle tbl_Patrone. Wenn im Formular frm_Fuellungen die CheckBox "Patronenwechsel" aktiviert wird, soll in tbl_Patrone das Datum FuellungAm aus tbl_Fuellungen identisch gefüllt sein. Ich habe da jetzt schon mit verschiedenen Abfragen experimentiert. Leider ohne Erfolg.

Wenn das soweit funktioniert möchte ich noch einen Bericht haben, in dem die Datumswerte aus tbl_Patrone stehen und zu jedem Eintrag die Summe der Einträge aus frm_Fuellungen. Immer zwischen dem letzten Datum und dem neuen Datum.

In der Tabelle steht jetzt z. B. am 27.07.2024 und 14.10.2024 unter Bemerkung Filterwechsel. Zwischen den beiden Daten liegen 13 Einträge. Dies wäre aber nur ein Beispiel, was ich mir vorstelle.

Ich hoffe, ihr habt nicht verstanden. Könnt ihr mir sagen, wie ich beide Dinge umsetzten kann?

LG Jens

Debus


Kutsche

Sorry, hatte nicht gesehen, dass die Anlage nicht mit hochgeladen wurde.

Debus

hier mal Teil 1 für das Datum
Private Sub Patronenwechsel_AfterUpdate()

   
    If Me.Patronenwechsel = True Then
        Dim db As DAO.Database
        Dim rst As DAO.Recordset

        Set db = CurrentDb()

       
        Set rst = db.OpenRecordset("tbl_Patrone", dbOpenDynaset)
        rst.AddNew
        rst!Wechseldatum = Me.FuellungAm  ' Feld-Namen ggf. anpassen!
       
        rst.Update

        rst.Close
        Set rst = Nothing
        Set db = Nothing
    End If


End Sub


Gruß
Holger

Kutsche

#4
Hallo Holger,
das ist jetzt aber nur für das Füllen der Tabelle, wenn ich es richtig verstanden habe. Wo baue ich den Code ein? Integriert in einen der Buttons im Formular?

LG Jens

Debus

In Deiner Checkbox Eigenschaften nach_Aktualisierung

Debus

TEil zwei würde ich mal mit zwei Abfragen versuchen und dann einen Bericht auf Basis Der Abfrage 2 machen

Abfrage1
SELECT
    P1.Wechseldatum AS Patronenwechsel_Ab,
    (SELECT MIN(P2.Wechseldatum) FROM tbl_Patrone AS P2 WHERE P2.Wechseldatum > P1.Wechseldatum) AS Patronenwechsel_Bis
FROM tbl_Patrone AS P1
ORDER BY P1.Wechseldatum;

Abfrage2
SELECT
    Patronenwechsel_Ab,
    Patronenwechsel_Bis,
    Nz(IIf(
        [Patronenwechsel_Bis] Is Null,
        DCount("*", "tbl_Fuellungen", "FuellungAm >= #" & Format([Patronenwechsel_Ab], "yyyy-mm-dd") & "#"),
        DCount("*", "tbl_Fuellungen",
            "FuellungAm >= #" & Format([Patronenwechsel_Ab], "yyyy-mm-dd") & "# AND FuellungAm < #" & Format([Patronenwechsel_Bis], "yyyy-mm-dd") & "#")
    ),0) AS AnzahlFuellungen
FROM AbfrageA1;

So sieht dann bei mir das Ergebnis aus


Holger

Kutsche

Zitat von: Debus am November 03, 2025, 21:37:11In Deiner Checkbox Eigenschaften nach_Aktualisierung
Hey Holger, das funktioniert. Ich habe jetzt beim Testen aber festgestellt, wenn ich in dem Formular die CheckBox aktiviert habe und die Eingaben dann speichere, dass sie für die nächste Eingabe aktiviert bleibt. Nehme ich den Haken raus, gibt es trotzdem einen Eintrag in der Tabelle. Was mache ich falsch? Geht es auch, dass die Checkbox beim Speichern wieder frei ist?

Kutsche

Zitat von: Debus am November 03, 2025, 21:41:15So sieht dann bei mir das Ergebnis aus

Holger
Hey Holger,
das funktioniert. Danke dafür.

Bleibt nur noch das Problem mit der markierten CheckBox.

Debus

Private blnInitialLoad As Boolean

Private Sub Form_Load()
   
    blnInitialLoad = True
End Sub

Private Sub Form_Current()
   
    blnInitialLoad = False
End Sub

Private Sub CheckBox_AfterUpdate()
   
    If blnInitialLoad = False Then
        If Me.CheckBox.Value = True Then
           
            MsgBox "Checkbox neu angehakt"
        End If
    End If
End Sub

Wird du nur ausgeführt wenn neu gesetzt wird
Holger



Kutsche

wo muss der Code jetzt hin? Direkt beim Aufruf des Formulars?

Debus

Schau mal das sind drei Teile
1. Form_Load
2. Form_Current

Beide einfach in den Code der Form kopieren und das andere zur Chechbox wieder nach_Aktualisierung

Kutsche

irgendwas habe ich jetzt falsch gemacht. Hatte Teil 1 und 2 direkt in das Makro für das Formular kopiert und bekomme nun beim Aufruf die Fehlermeldung im Anhang.

Debus

Rechner sind aus. Sorry. Wenn keiner mehr was schreibt kann ich es morgen gerne mal was hochladen

Holger

MzKlMu

Hallo,
ZitatHatte Teil 1 und 2 direkt in das Makro für das Formular kopiert
Was für ein Makro ?
Man kann kein VBA Code in ein Makro kopieren. Makro und VBA Code sind bei Access 2 verschiedene Dinge und haben nichts miteinander zu tun.
Makros sind bei Access eher zu meiden.
Gruß Klaus