1

晚上,

我创建了一个查询,假设Date/Time当一个人年满 89 岁时,只将字段的年份部分更改为 1900。随后的查询编译得很好,但是在运行时它会抱怨 aType Conversion failure并从受影响的记录中删除整个值。

查询:

UPDATE tblTestForDOB
SET tblTestForDOB.[PT_BirthDate] = DateValue( (day([PT_BirthDate])/month([PT_BirthDate])/1900) )
WHERE Year(tblTestForDOB.[PT_BirthDate]) <= Year(Date())-"89";

根据MS Help(F1 over the function):

所需的日期参数通常是一个字符串表达式,表示从 100 年 1 月 1 日到 9999 年 12 月 31 日的日期。但是,日期也可以是可以表示该范围内的日期、时间或日期和时间的任何表达式.

这不是我在做什么吗?我还尝试" " &在函数中放置值之前,DateValue并且做了同样的事情(以确保它是一个被传递的字符串)

那么我该怎么做呢?我应该使用CDate将值转换为日期然后继续吗?如果是这样,正确的语法是什么?

谢谢

PS 该字段是Short Date格式的。另请注意,我不想花很长时间并在整个过程中使用 VBA,因为这将涉及打开记录集等等......

4

1 回答 1

1

看来您正在尝试提供DateValue字符串,但这不是正在发生的事情。可能还有更多我不明白的事情,所以我将向您展示一个即时窗口会话,其中可能包含您可以构建的东西。

PT_BirthDate = #1923-6-1#
? PT_BirthDate
6/1/1923 
? DateDiff("yyyy", PT_BirthDate, Date())
 90 

' this throws error #13: Type mismatch ...
? DateValue( (day([PT_BirthDate])/month([PT_BirthDate])/1900) )

' it will work when you give DateValue a string ...
? DateValue("1900-" & Month(PT_BirthDate) & "-" & Day(PT_BirthDate))
6/1/1900 
' or consider DateSerial instead ...
? DateSerial(1900, Month(PT_BirthDate), Day(PT_BirthDate))
6/1/1900 
于 2013-08-29T16:49:41.893 回答