需要帮助比较通过 vba 访问的日期

need help comparing dates in access via vba

我有以下问题:无法获取 sql 查询来处理日期。以下查询:

strRowSource = "SELECT [ID],[TaskType],[TaskName],[StartDate],[EndDate],[isFinished] " & _
"FROM tblTasks " & "WHERE [Person] = " & TempVars("CurrentUser") & " AND [EndDate] < #" & Format(Now(), "short date") & "#"

return 没有任何价值。我想得到的是过期的任务列表。

提前致谢

我正在使用这个方便的函数来格式化日期:

Public Function JetSqlDate(ByVal d As Variant) As String
    If IsNull(d) Then
        JetSqlDate = "NULL"
    Else
        JetSqlDate = Format$(d, "\#mm\/dd\/yyyy hh\:nn\:ss\#")
    End If
End Function

用法:

strRowSource = "SELECT ID, TaskType, TaskName, StartDate, EndDate, isFinished " & _
  "FROM tblTasks WHERE Person = " & TempVars("CurrentUser") & _
  " AND EndDate < " &  JetSqlDate(Now())

请注意,转义列名 ([]) 仅在列名包含空格等无效字符或与关键字冲突时才需要。例如。如果您有一个名为 From 的列,则必须将其写为 [From].


对于 SQL-我使用的服务器直通查询:

Public Function TSqlDate(ByVal d As Variant) As String
    If IsNull(d) Then
        TSqlDate = "NULL"
    Else
        TSqlDate = "{ ts '" & Format$(d, "yyyy\-mm\-dd hh\:nn\:ss") & "' }"
    End If
End Function

对于字符串:

Public Function SqlStr(ByVal s As String) As String
'Input: s=""      Returns: NULL
'Input: s="abc"   Returns: 'abc'
'Input: s="x'y"   Returns: 'x''y'

    If s = "" Then
        SqlStr = "NULL"
    Else
        SqlStr = "'" & Replace(s, "'", "''") & "'"
    End If
End Function

请注意,此函数添加分隔符并转义字符串值中包含的任何分隔符。这使得查询更可靠,也可以防止 SQL Injection.

您可以将其减少为:

strRowSource = "SELECT ID, TaskType, TaskName, StartDate, EndDate, isFinished " & _
    "FROM tblTasks " & _
    "WHERE Person = " & TempVars("CurrentUser") & " AND EndDate < Now()"