Neuigkeiten:

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

Mobiles Hauptmenü

Letzter Datensatz nach Öffnen

Begonnen von tibrun, Januar 11, 2023, 19:19:30

⏪ vorheriges - nächstes ⏩

tibrun

Hallo Liebe Access-Freunde.

ich habe folgendes Problem und bin nun bereits Stunden am recherchieren.
Ich habe eine Datenbank in MS Access mit einer Tabelle Namens "Werktagebuch_Daten" mit den Spalten "ID", "Kein Betrieb" und "Produktionsbeginn". Die Spalten "Kein Betrieb" und "Produktionsbeginn" werden über ein Formular mit dem Namen "Werktagebuch_Formular" ausgefüllt.

Beim Öffnen des Formulars soll automatisch der Datensatz im Formular mit der höchsten ID angezeigt werden. Aber auch nur die höchste ID des Datensatzes wo ebenfalls mindestens ein Wert in der Spalte "Kein Betrieb" oder "Produktionsbeginn" vorhanden ist.  (Mit anderen Worten soll der zuletzt ausgefüllte Datensatz angezeigt werden, welcher aber eben nicht der letzte Datensatz in der Tabelle seien wird.)
Diese Ereignisprozedur könnte man als VBA Script ja beim Öffnen des Formulares hinterlegen. Aber wie müsste das Script aussehen?
Ich freue mich über jede Hilfe. Bin wirklich ein totaler Access-Troll. :P

Grüße, Tim
  •  

MzKlMu

Hallo,
filtere die Abfrage für das Formular entsprechend. Und dann noch nach der ID absteigend sortieren. Dann ist der DS mit der höchten ID der angezeigte DAtensatz. Da braucht man kein Script.
Gruß
Klaus
  •  

ebs17

Aktualisierbar:
SELECT
   D.ID,
   D.KeinBetrieb,
   D.Produktionsbeginn
FROM
   Werktagebuch_Dat AS D
WHERE
   D.ID IN
      (
         SELECT TOP 1
            X.ID
         FROM
            Werktagebuch_Dat AS X
         WHERE
            X.KeinBetrieb > 0
               OR
            X.Produktionsbeginn > 0
         ORDER BY
            X.ID DESC
      )

Erwartbar am Schnellsten:
SELECT
   D.ID,
   D.KeinBetrieb,
   D.Produktionsbeginn
FROM
   Werktagebuch_Dat AS D
      INNER JOIN
         (
            SELECT
               MAX(ID) AS MaxID
            FROM
               Werktagebuch_Dat
            WHERE
               KeinBetrieb > 0
                  OR
               Produktionsbeginn > 0
         ) AS X
         ON D.ID = X.ID
Mit freundlichem Glück Auf!

Eberhard
  •  

tibrun

Hallo Lieber ebs17,

erstmal vielen Dank für deinen Code. Ich hatte den Code jetzt in einer Ereignisprozedur hinterlegt, welche beim Öffnen des Formular ausgeführt wird. Leider erhalte ich immer einen Syntaxfehler beim ausführen.

Hab ich jetzt vielleicht den Fehler gemacht, dass der Code woanders hinterlegt werden soll?
Bitte hilf mir einmal auf die Sprünge.

Vielen Dank für deine Zeit!
Tim
  •  

MzKlMu

Hallo,
der gezeigte Code ist eine SQL Abfrage mit einer Ereignisprozedur hat das nichts zu tun. Das ist auch kein VBA.
Gruß
Klaus
  •  

tibrun

Hallo in die Runde,

ich habe es jetzt selber herausgekriegt und es mir ein wenig einfacher gemacht.

Eine neue Spalte in der Tabelle wird jetzt automatisch bei Änderung eines Datensatzes mit dem aktuellen Datum beschrieben. Innerhalb dieser Werte wird dann beim Öffnen des Formulars gefiltert und der neuste angezeigt.

Private Sub Form_Open(Cancel As Integer)
    'Variable für die ID des Datensatzes mit dem höchsten Datum erstellen
    Dim maxID As Long
    'Abfrage zum Ermitteln der ID des Datensatzes mit dem höchsten Datum
    With CurrentDb.OpenRecordset("SELECT ID FROM Werktagebuch_Daten WHERE DateModified = (SELECT MAX(DateModified) FROM Werktagebuch_Daten)")
        'Wenn es mindestens einen Datensatz gibt
        If Not .EOF Then
            'Werte aus Abfrage in Variablen speichern
            maxID = .Fields("ID")
            'Datensatz mit höchstem Datum in Formular öffnen
            Me.Recordset.FindFirst "ID = " & maxID
        End If
        .Close
    End With
End Sub

So konnte ich mir nun helfen. Es wird immer der zuletzt bearbeitete Datensatz angezeigt. Das ist in der Regel dann auch der richtige.
Dennoch vielen Dank für eure Hilfe!
Gruß, Tim
  •