【问题标题】:Access type mismatch on date field with SQL Server express backend日期字段与 SQL Server Express 后端的访问类型不匹配
【发布时间】:2026-02-06 02:00:01
【问题描述】:

我有一个带有未绑定文本框的简单访问表单,用于搜索具有匹配日期的记录,结果显示在子表单中。后端数据库存储在 SQL Express 2008 实例中,可通过 ODBC 连接 (SQL Server Native Client 10.0) 访问。客户端是 Access 2007,在 64 位 Windows 7 专业版上运行。

当用户点击表单上的搜索按钮时,会执行以下 VBA 代码来更新子表单。

Private Sub UpdateSfmQuery()
    Dim query As String

    If IsDate(txtDate.Value) And IsNumeric(cboStaff.Value) Then
        query = "SELECT * FROM TimesheetEntries " & _
                "WHERE StaffId = " & cboStaff.Value & " " & _
                "AND [Date] = '" & _
                Format(txtDate.Value, "YYYY/MM/DD HH:MM:SS") & "' "
    Else
        query = "SELECT * FROM TimesheetEntries WHERE 0 = 1;"
    End If

    frmTimesheetUpdateSfm.Form.RecordSource = query  '<--- Fails here
End Sub

SQL Server 后端 [Date] 字段中的数据类型是 DateTime,上面的代码在上面突出显示的行上失败,错误为 Data type mismatch in criteria expression

我尝试将 txtDate 的格式属性从短日期更改为一般日期,并且我还修改了上面一行中格式化 txtDate.Value 的日期格式。

上述代码摘录中的变量query 中包含的SQL 查询(值如下所示),在复制并粘贴到SQL Express Management Studio 时完美执行。

SELECT * FROM TimesheetEntries WHERE StaffId = 14 AND [Date] = '2011/11/22 00:00:00'

我做错了什么?

【问题讨论】:

    标签: ms-access sql-server-express vba date-format type-mismatch


    【解决方案1】:

    问题是本地 Access 查询中的日期值需要用井号/井号而不是引号括起来。基本上,与任何 SQL 数据库一样,Access 有自己的 SQL 方言,它与 SQL Server 略有不同。

    Private Sub UpdateSfmQuery()
        Dim query As String
    
        If IsDate(txtDate.Value) And IsNumeric(cboStaff.Value) Then
            query = "SELECT * FROM TimesheetEntries " & _
                    "WHERE StaffId = " & cboStaff.Value & " " & _
                    "AND [Date] = #" & _
                    Format(txtDate.Value, "YYYY/MM/DD HH:MM:SS") & "# "
        Else
            query = "SELECT * FROM TimesheetEntries WHERE 0 = 1;"
        End If
    
        frmTimesheetUpdateSfm.Form.RecordSource = query  '<--- Used to fail here
    End Sub
    

    请记住,您始终可以制作查询模型并使用 Access 的查询编辑器尝试使查询正常工作。

    作为旁注,我建议您使用 ms-access 标签标记此类问题,除非您的问题特定于某个 Access 版本。

    【讨论】:

    • 刚刚开始测试这个,但效果很好。非常感谢。我是 access 新手,但多年来一直使用 SQL 开发,我发现 access 似乎有很多这样的小怪癖。
    最近更新 更多