此语法显示错误
数据类型转换错误
我以为我正在将字符串与字符串进行比较?
Sub Test()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim dte As Date
Dim formatteddate As String
Set db = CurrentDb
dte = "01/01/2015 00:00:00"
formatteddate = Format(dte, "mm/dd/yyyy")
For Each tdf In db.TableDefs
If (CurrentDb.TableDefs(tdf).DateCreated <= formatteddate) Then
Debug.Print tdf.DateCreated
End If
Next
Set db = Nothing
Set tdf = Nothing
End Sub
答案 0 :(得分:1)
“我以为我正在将字符串与字符串进行比较?”
DateCreated
返回日期/时间值,因此比较DateCreated <= formatteddate
正在将日期/时间与字符串值进行比较。
但是,这不是错误原因#3421,“数据类型转换错误。”
在CurrentDb.TableDefs(Item)
中,项必须是TableDef
的序号或名称属性。 (请参阅Access'帮助系统中的 TableDefs集合主题。)
但是你将 tdf ,一个TableDef
对象作为 Item 。这种不匹配会触发错误。您可以通过为 Item 提供 tdf.Name 来避免错误:
CurrentDb.TableDefs(tdf.Name).DateCreated
但是,由于您已经拥有 tdf ,因此无需重新访问CurrentDb.TableDefs
...只需直接询问tdf.DateCreated
。
这会使错误消失,但在将DateCreated
与 formatteddate 字符串值进行比较时,您将无法获得任何结果。该问题的解决方案是将tdf.DateCreated
与日期/时间值进行比较。
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim dte As Date
Set db = CurrentDb
dte = #1/1/2015#
For Each tdf In db.TableDefs
If tdf.DateCreated <= dte Then
Debug.Print tdf.Name, tdf.DateCreated
End If
Next
Set db = Nothing
Set tdf = Nothing