Neuigkeiten:

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

Mobiles Hauptmenü

Syntaxfehler in DLookup - Laufzeitfehler 3075

Begonnen von Will1974, April 02, 2024, 08:09:49

⏪ vorheriges - nächstes ⏩

Will1974

Liebe Forummitglieder,

bei nachfolgendem Code erhalte ich folgende Fehlermeldung:

Laufzeitfehler 3075 - Syntaxfehler (fehlender Operator) in Abfrageausdruck 'AuswID = 225 And Timestamp = 01.04.20224 09:35:00'.

Me.Bemerkungen = DLookup("Bemerkungen", "tbl_Details", "AuswID = " & Me.AuswID & " AND Timestamp = " & DMax("Timestamp", "tbl_Details", "AuswID = " & Me.AuswID))
Kann mir hier jemand helfen, ich finde den Wurm nicht.

Danke, lG aus Österreich

Josef P.

Hallo!

Ein Datum/Uhrzeit-Wert muss für SQL passende formatiert sein.
AuswID = 225 And Timestamp = #2024-04-01 09:35:00#Anm.: Timestamp-Wert ist hoffentlich auf die Sekunde genau und enthält keine Bruchteile einer Sekunde, sonst wird der Vergleich mit = vielleicht nicht True werden.

Das könntest du dir auch überlegen:
select Top 1 Bemerkung from tbl_Details where AuswID = 225 order by Timestamp DESC
Grüße aus dem Süden (von Österreich) :)
Josef

Will1974

#2
Hallo Josef,

vielen Dank für deine Unterstützung.
Ich habe DLookup nun verworfen und habe den Code auf ein Recordset umgebaut.

Die Logik zur Ermittlung des passenden Feldes "Bemerkungen" zur jeweiligen "AuswID" habe ich dabei an das Kriterium "Archiviert = 0" gebunden. So sind meine Ergebnisse vom Änderungsdatum unabhäng.

So erhalte ich im Ausgabefenster alle AuswIDs inkl. zugehöriger (nicht leerer) Bemerkungen, welche nicht den Status "Archviert" haben.
Das funktioniert soweit schon einmal sehr gut  :).

Private Sub Form_Current()

Dim rst As DAO.Recordset
Dim strSQL As String
       
strSQL = "SELECT * " & _
         "FROM tbl_Details " & _
         "Where Bemerkungen IS NOT NULL " & _
         "And Archiviert = 0 " & _
         "ORDER BY AuswID ASC"

Set rst = CurrentDb.OpenRecordset(strSQL)

If Not (rst.EOF And rst.BOF) Then
rst.MoveFirst
Do Until rst.EOF = True

Debug.Print rst!AuswID
Debug.Print rst!Bemerkungen

Me.Bemerkungen = rst!Bemerkungen

rst.MoveNext
Loop

rst.Close
Set rst = Nothing
End If

End Sub

Ergebnis im Ausgabefenster:

236
Testbemerkung dreihundertzwanzig
237
Testnotiz achte, neunte, zehnte
243
Winke Winke

Es gelingt mir aber nicht, die jeweilige Bemerkung im ungebundenen Feld "Bemerkungen" im Endlosformular anzuzeigen.
Me.Bemerkungen = rst!Bemerkungen liefert in allen Feldern logischerweise das gleiche Ergebnis.

Wie kann ich nun bewerkstelligen, dass die jeweilige Bemerkung im Endlosformular im richtigen Datensatz  (AuswID vorhanden) angezeigt wird?
Ich beiss mir gerade die Zähne daran aus, wie kann ich die jeweilige Bemerkung der richtigen AuswID zuordnen - das sollte doch gehen, oder?

MzKlMu

#3
Hallo,
ich denke, das kannst Du Dir alles sparen, wenn Du mit gebundenen Formularen arbeitest.
Ist das Endlosformular ein Unterformular ?

Kannst Du das Vorhaben als solches mal besser beschreiben ?

Gruß Klaus

Will1974

#4
Ganz oberflächlich auf den ersten Blick betrachtet hast du recht, ich habe aber Gründe, warum ich diesen Weg gehen muss.

Natürlich ist die Tabelle Details, welche das Feld "Bemerkungen" enthält über das Feld AuswID mit der Haupttabelle Ausweise über 1:n verknüpft.

Ich benötige nun aber ein spezielles Formular in der ENDLOSANSICHT und NICHT ein Haupt-Unterfomular.

Da beide Tabellen aber mehrfach vorkommende Daten enthalten, beziehe ich die Daten für das gewünschte Endlosformular aus einer Abfrage, welche die Daten der Haupttabelle nach letztem Wert gruppiert. Wenn ich das Feld Bemerkungen aus der verknüpften Tabelle Details in meiner Abfrage hinzufüge, kann ich die Werte der Hauttabelle nicht mehr nach letztem Wert gruppieren, da im Feld Bemerkungen immer etwas anderes steht.

Deshalb möchte ich diese Information per Recordset in mein Endlosformular reinbasten, ich weiß nicht ob du mir folgen kannst?

ebs17

#5
Ein ungebundenes Feld in einem Endlosformular ist genau ein Feld und übernimmt nur einen Wert, nach Ablauf der Überschreibungen durch die Schleife wirst Du den letzten Eintrag sehen.

Zitatdie jeweilige Bemerkung im Endlosformular im richtigen Datensatz  (AuswID vorhanden) angezeigt wird?
Setze in einer Abfrage die bisherige Datenherkunft Deines Formulars und die gezeigte Abfrage per JOIN zusammen. Damit kann über ein gebundenes Textfeld auch der Inhalt für Bemerkungen angezeigt werden.

Zu Deinem letztgenanntem Problem: Eine Änderung der Abfolge kann sehr drastisch wirken. Es ist ein Unterschied, ob man erst die Tabellen verknüpft und dann über alles gruppiert (was den allermeisten als einziges oder zumindest erstes einfällt), oder ob man erst innerhalb der Tabelle(n) gruppiert und dann verknüpft.
Mit freundlichem Glück Auf!

Eberhard

Will1974

@MzKlMu und @ebs17,

hmmm, ich hab mir jetzt 1 Tag lang den Kopf zermartert und habe meine Abfrage gerade nochmal neu gebaut.
Auch diesmal habe ich wie gehabt alle Felder der Haupttabelle (Alle Felder letzer Wert, Feld Timestamp auf Max) und das Feld Bemerkungen (letzer Wert) der verknüpften Detailtabelle in die Abfrage aufgenommen und erhalte jetzt auf Anhieb die richtige Anzahl der Datensätze und auch die richtigen Bemerkungen bei diesen Datensätzen  ::) .

Und alles ganz OHNE Recordset :)...
ich hab null Ahnung woran ich die ganze Zeit gescheitert bin, aber es funktioniert plötzlich alles wie ich es wollte.

Manchmal verbeißt man sich in Probleme, welche am Ende gar keine waren ;D , danke jedenfalls für Eure Unterstützung!

PS: Ich hoffe, ich hab nicht schon wieder einen Denkfehler :-[