【发布时间】:2018-11-15 01:20:42
【问题描述】:
我正在尝试在我的 Access 数据库上创建一个选项,以删除两个日期之间的所有记录。
我在下面的代码似乎无法始终如一地工作。例如,如果我的数据库的日期为 01/01/18 到 01/30/18,并且我指定的范围正好是 01/01/18 到 01/30/18,那么它会起作用并删除所有数据。
但如果我指定任何其他日期范围(如 01/01 - 01/15),它将失败并且不会删除任何记录。
[交易日期] 是短文本格式,而不是日期,但所有条目都是 MM/DD/YY。除非这是问题并且没有其他选择,否则宁愿保持这种方式。
请让我知道我做错了什么或可以做得更好。先感谢您。
Dim trFrmDat As String
Dim trToDat As String
Dim dbsDelete As DAO.Database
Dim qdfToDelete As DAO.QueryDef
Dim countString As String
Dim count As Long
Set dbsDelete = CurrentDb
trFrmDat = InputBox("Trade Date To Be Deleted From [MM/DD/YY]:")
trToDat = InputBox("Trade Date To Be Deleted To [MM/DD/YY]:")
If Len(trFrmDat) <> 8 Or Len(trToDat) <> 8 Then
MsgBox ("The correct date or answer has not been entered. Process Aborted.")
Exit Sub
Else
countString = "SELECT COUNT(PK_ID) FROM AR_Consolidated WHERE [Trade Date] BETWEEN " & trFrmDat & " AND " & trToDat & ""
count = dbsDelete.OpenRecordset(countString).Fields(0).Value
Set qdfToDelete = dbsDelete.CreateQueryDef("", "DELETE FROM AR_Consolidated WHERE [Trade Date] BETWEEN " & trFrmDat & " AND " & trToDat & "")
qdfToDelete.Execute dbFailOnError
MsgBox ("" & count & " records have been deleted from AR_Consolidated")
End If
编辑:
我最终使用了以下建议之一,但日期的格式仍然存在问题,因此我承认我无法将实际字段保留为短文本。我刚刚注入了一条变更线,一切正常。
DoCmd.RunSQL "ALTER TABLE AR_Consolidated ALTER COLUMN [Trade Date] Datetime"
【问题讨论】:
-
永远不要将日期存储为文本。此外,请避免在字段名称中添加空格。
标签: sql vba date ms-access between