Viele Wege führen nach Rom, ich habe mich entschlossen, zur Formatierung die Funktion cSql zu benutzen.
Public Function cSql(Expression As Variant, _
Optional VariableType As VbVarType = vbString) As String
If IsNull(Expression) Or Expression = vbNullString Then
cSql = "NULL"
Else
Select Case VariableType
Case vbString
If InStr(1, Expression, "'") <> 0 Then
cSql = "'" & Replace(CStr(Expression), "'", "''") & "'"
Else
cSql = "'" & CStr(Expression) & "'"
End If
Case vbDecimal, vbCurrency, vbDouble, vbSingle, vbLong, vbInteger
If IsNumeric(Expression) Then
cSql = Str(Expression)
Else
cSql = CStr(Expression)
End If
Case vbDate
If IsDate(Expression) Then
cSql = Format(CDate(Expression), "\#mm\/dd\/yyyy\#")
' Alternativ
' cSql = Format(CDate(Expression), "\#yyyy-mm-dd\#")
Else
cSql = CStr(Expression)
End If
Case vbBoolean
If IsNumeric(Expression) Then
If CBool(Expression) Then
cSql = "True"
Else
cSql = "False"
End If
Else
Select Case Expression
Case "Ja", "Wahr", "True", "Yes"
cSql = "TRUE"
Case Else
cSql = "FALSE"
End Select
End If
Case Else
cSql = Expression
End Select
End If
End Function
In der Tabelle "Chargen" werden die Datumswerte der Produktions-chargen gespeichert Felder CID = Schlüssel und Charge = Datum
Für den Beginn gibt es nur eine Datenzeile und Debug.Print rsCharge![Charge] zeigt 10.12.2011 für 10.Dez.2011
Das Textfeld "txtCharge" im Formular Bestand1 liefert bei der Eingabe 10.Dez.2011 den Wert 10.12.2011
Diesen Wert habe ich der Variable C(date) zugewiesen C = Forms![Bestand1]![txtCharge]
Unter Verwendung der obigen Funktion liefert Debug.Print cSql(C,vbDate) #12/10/2011#
Die Abfrage soll CID und Charge liefern wo Charge und C übereinstimmen.
Also ungefähr so:
rsCharge = db.OpenRecordset("Select * FROM Chargen WHERE Chargen.Charge = cSql(C,vbDate);")
falsch und man kann so viel falsch machen in diesem kleinen Statement
Gruß
bejay
Ich habs endlich kapiert:
Set rsCharge = db.OpenRecordset("SELECT * FROM Chargen WHERE Charge =" & cSql(C, vbDate))
Debug.Print rsCharge![Charge]
10.12.2011
Gute Nacht.
bejay