1

我正在研究这个 Access 2002 数据库。它使用连接到 SQL Server 2008 的服务器。我在加载主表单时遇到问题,它会执行 DLookup 并查看日期。

EndDate = Nz(DLookup("End_Date", "Employee", "EmpID= " & EmpID & " AND End_Date IS NOT NULL AND End_Date < #" & Now & "#"), "")

现在这在 Access 2002 中工作正常,但在 Access 2010 中我得到:从字符串转换日期和/或时间时转换失败

不过,这里是最重要的,它在 Access 2010 中适用于一个用户:我自己。没有其他用户可以使用它,Windows 7 和 Access 2010 运行时的其他安装也可以正常工作。在同一台机器上,MDB 也可以正常工作。如果我用 SQL Server 中的单引号替换英镑符号,它在 2010 机器上运行良好,但在 2002 机器上不再工作(duh)。

它一直在破坏我的大脑,通常我已经能够通过卸载所有 Office 然后重新安装并确保最后安装 Access Runtime 的 SP1 来使其工作。

4

2 回答 2

2

与其将 的值转换为Now()中的字符串DLookup,不如让数据库引擎Now()自己确定。

EndDate = Nz(DLookup("End_Date", "Employee", _
"EmpID= " & EmpID & " AND End_Date IS NOT NULL AND End_Date < Now()"), "")

该方法不依赖于日期/时间和字符串之间的转换并再次返回,因此可以避免您报告的问题。

如果您想检查原件如何DLookup给出不同的结果,请在不同的机器上尝试这样的操作:

Dim strCriteria As String
strCriteria = "EmpID= " & EmpID & " AND End_Date IS NOT NULL" & _
    " AND End_Date < #" & Now & "#"
Debug.Print "strCriteria: " & strCriteria
EndDate = Nz(DLookup("End_Date", "Employee", strCriteria), "")

运行该代码后,转到立即窗口 ( Crtl+ g) 并检查strCriteria.

于 2012-10-22T19:33:05.537 回答
0

请注意,您在 SQL Server 中使用的日期/时间字段的类型可能会导致问题,这可以解释版本之间的差异。

Access 2010 为 SQL Server 2008 中添加的四种新日期/时间数据类型提供有限支持:

时间
DATE
DATETIME2
DATETIMEOFFSET

-- http://office.microsoft.com/en-us/access-help/create-an-access-project-HA010341589.aspx#_Toc257281378

如果您在 SQL Server 中将日期存储为数据类型“Date”或“Date2”,请尝试将它们更改为“DateTime” 我在将数据从 SQL Server 2008R2 链接到访问 97 时遇到此问题,访问没有将其视为日期,并且像文本一样对待它

-- MS-Access 前端不能识别来自 SQL Server 的日期

顺便说一句,不需要End_Date IS NOT NULL, 一旦你添加了另一个标准,空值将被排除,除非你特别包含它们。

于 2012-10-22T19:55:53.410 回答