Neuigkeiten:

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

Mobiles Hauptmenü

AC00, Abfrage mit Datumskriterium

Begonnen von bejay, Juni 20, 2012, 23:03:52

⏪ vorheriges - nächstes ⏩

bejay

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

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