我目前正在处理 MS Access 数据库,但在日期减法方面遇到了问题。
本质上,我正在尝试创建一个目标日期,例如:
目标日期 = 截止日期 - 提前期
即提前期可能是 30 天,因此目标日期应比截止日期早 30 天。
我尝试使用的代码是这样的:
strSQL = "INSERT INTO dbo_DEALER_TASK ( Dlr_Number, Action_Id, Task_Id, Area_Id,
Task_Deadline_Date, Responsible_Person_Id, Alternate_Person_Id, Priority, Comment,
Suppress_Email, Dealer_Type ) "
strSQL = strSQL & "SELECT dbo_DEALER_ACTION.Dlr_Number, dbo_DEALER_ACTION.Action_Id,
qryAllTasksToAdd.Task_Id, qryAllTasksToAdd.Area_Id, Deadline_Date - Deadline_adjustment
AS 'Task_Deadline_Date', qryAllTasksToAdd.Person_Responsible_Id,
qryAllTasksToAdd.Alternate_Responsible_Id, qryAllTasksToAdd.Priority,
qryAllTasksToAdd.Comment, qryAllTasksToAdd.Suppress_Email,
qryAllTasksToAdd.Applies_To_Dealer_Type "
strSQL = strSQL & "FROM dbo_DEALER_ACTION LEFT JOIN qryAllTasksToAdd ON
(dbo_DEALER_ACTION.Dealer_Type = qryAllTasksToAdd.Applies_To_Dealer_Type) AND
(dbo_DEALER_ACTION.Action_Id = qryAllTasksToAdd.Action_Id) "
strSQL = strSQL & WHERE (((qryAllTasksToAdd.Task_Id)=" & Me.Task_Id & ") AND
((dbo_DEALER_ACTION.Date_Completed) Is Null));"
DoCmd.RunSQL strSQL
当 VBA 代码执行该语句时,所有内容都会正确更新,但 Task_Deadline_Date 字段除外,该字段留空。
但真正让我感到困惑的是,如果我独立运行此 SQL 语句,它会按预期工作。在尝试了多种不同的想法后,我尝试用字符串文字日期替换“Deadline_Date - Deadline_adjustment AS 'Task_Deadline_Date'”,然后该语句运行良好
有人知道哪里出了问题吗?
谢谢,
克里斯
请您参考如下方法:
你引用了别名,你不应该这样做:
Deadline_Date - Deadline_adjustment AS Task_Deadline_Date
不是
Deadline_Date - Deadline_adjustment AS 'Task_Deadline_Date'
添加引号时,字段名称为 'Task_Deadline_Date'
根据你的日期字段的数据类型和你是否使用SQL Server,你可能需要使用DateAdd,例如:
DateAdd("d",-[Deadline_adjustment],[Deadline_Date])




