原因是 Microsoft Access 实际读取DateTime
特定方式的方式。当您使用串联时,它可能会引入问题。
Access只能以下列方式存储日期/时间:
- 有效日期:-657, 434(公元 100 年 1 月 1 日)至 2,958,465(公元 9999 年 12 月 31 日)
- 有效时间:0.0 (00:00:00) 至 0.99999 (23:59:59)
它可以通过以下方式格式化:
- 存储值(双数)= 默认格式(常规日期)= 自定义格式
- 36296.0 = 5/15/99 = 05/15/1999 上午 12:00:00
因此,您必须牢记 Microsoft Access 的局限性;因为 SQL 读取日期的方式略有不同,并且存储它们的方式也略有不同。上下文中最轻微的中断都会对结果产生深远的影响。
最简单的方法是Query based on Parameters。这样您就不会连接 Access 的无效语法。这将缓解一些问题。
本机访问利用以下功能:
将关联的日期添加到时间比较中:
var1 = #1/1/99 2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? var2 = #1/1/99 2:11:00 PM#
Convert the time values to string data types before you compare them:
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? CStr(var2) = CStr(#2:11:00 PM#)
使用 DateDiff() 函数比较精确的单位,例如秒:
var1 = #2:01:00 PM#
var2 = DateAdd("n", 10, var1)
? DateDiff("s", var2, #2:11:00 PM#) = 0
因此,本机访问查询看起来像这样:
UPDATE [dbo].[Customer]
SET [dbo].[Customer].[InvoiceDate] = #1/1/99 2:11:00 PM#;
如您所见,它尝试像 SQL 一样工作,但它不是 SQL。因此,通过创建基于参数的查询,您可以确保在 Access Database 中实现了有效的语法。史蒂夫发布了一个很好的例子,所以我不会发布代码示例。但希望这可以帮助您了解它们之间的区别。