Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!
Zitat von: Beaker s.a. am Januar 06, 2026, 17:51:39sMatchdate kommt soMir ist unklar, welche Prozedur du hier genau meinst und ob du den obigen Wert als String oder als Datum meinst.Zitat#2025/11/15 00:00:00#in der Prozedur an, die den Fehler produziert.
? cdate("#2025/11/15 00:00:00#")
=> Type mismatch Error
? cdate("2025/11/15 00:00:00")
=> 15.11.2025
Public Function testSQL()
Dim dDate As Date
Dim sSQL As String
dDate = "15.11.2025"
sSQL = "SELECT Min(T.Spieltag) AS DateFrom " & vbCrLf & _
"FROM (" & vbCrLf & _
" SELECT TOP " & 50 & " Q.Spieltag " & vbCrLf & _
" FROM qSpieltage AS Q " & vbCrLf & _
" WHERE Q.Spieltag < " & SQLDateString(dDate) & vbCrLf & _
" ORDER BY Q.Spieltag DESC" & vbCrLf & _
") AS T"
SqlDebug sSQL
End Functionals Ergebnis ZitatSELECT Min(T.Spieltag) AS DateFromerhalte.
FROM (
SELECT TOP 50 Q.Spieltag
FROM qSpieltage AS Q
WHERE Q.Spieltag < #2025/11/15#
ORDER BY Q.Spieltag DESC
) AS T
Zitat?SQLDateString("15.11.2025")sMatchdate kommt so
#2025/11/15#
Zitat#2025/11/15 00:00:00#in der Prozedur an, die den Fehler produziert.
Public Function SQLDateString( _
ByVal dValue As Date, _
Optional ByVal bIncludeTime As Boolean = False) As String
If bIncludeTime Then
SQLDateString = "#" & Format$(dValue, "yyyy\/mm\/dd hh:nn:ss") & "#"
Else
SQLDateString = "#" & Format$(dValue, "yyyy\/mm\/dd") & "#"
End If
End Function
Dies funzt sowohl mit "15.11.2025" als auch mit Date(). Da kommt doch wohl die
, nur hatte ich das nicht mehr ganz parat.
Zitat von: Knobbi38 am Januar 06, 2026, 13:42:39Man könnte sich dafür auch eine Funktion mit variabler Anzahl an Parametern schreiben, was das Ganze noch etwas vereinfacht.Dazu hatte ich mal was geschrieben...
Dim sSQL As String
Const SQL_MIN = _
"SELECT Min(T.Spieltag) AS DateFrom" _
& " FROM ( " _
& " SELECT TOP {0} Q.Spieltag" _
& " FROM qSpieltage AS Q" _
& " WHERE Q.Spieltag < {1} " _
& " ORDER BY Q.Spieltag DESC" _
& ") AS T"
sSQL = Replace(SQL_MIN, "{0}", CStr(lLastN))
sSQL = Replace(sSQL, "{1}", SQLDateString(sMatchDate))
Debug.Print "SQL > "; sSQL
Ist zwar etwas aufwendiger, aber relativ einfach zu handhaben, auch weil hier gut CP angewendet werden kann. Man könnte sich dafür auch eine Funktion mit variabler Anzahl an Parametern schreiben, was das Ganze noch etwas vereinfacht.... SQLDateString(sMatchDate) ...ZitatsSQL = _Die Variablen lLastN und sMatchDate sind korrekt befüllt, sSQL als String
"SELECT Min(T.Spieltag) AS DateFrom " & vbCrLf & _
"FROM (" & vbCrLf & _
" SELECT TOP " & lLastN & " Q.Spieltag " & vbCrLf & _
" FROM qSpieltage AS Q " & vbCrLf & _
" WHERE Q.Spieltag < " & SQLDateString(sMatchDate) & vbCrLf & _
" ORDER BY Q.Spieltag DESC" & vbCrLf & _
") AS T"