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
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.
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
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
Hallo,
der gezeigte Code ist eine SQL Abfrage mit einer Ereignisprozedur hat das nichts zu tun. Das ist auch kein VBA.
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