2015-07-09 4 views
2

Этот синтаксис представляет собой ошибкуИспользование Дата В If Заявление

ошибка преобразования типа данных

Я думал, сравнивая строки в строку?

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 
+1

'dte' является датой:' Dim dte As Date'. – Bond

+0

Является ли ошибка в этой строке: 'If (CurrentDb.TableDefs (tdf) .DateCreated <= formatteddate) Then'? Какой тип данных «DateCreated»? – Bond

+0

@ HansUp, который получил это! Как удалить таблицу, если параметры выполнены? –

ответ

1

"Я думал, сравнивая строки в строку?"

DateCreated возвращает значение даты/времени, поэтому сравнение DateCreated <= formatteddate сравнивает дату/время, чтобы значение String.

Однако это не является причиной ошибки # 3421, «Ошибка преобразования типа данных».

В CurrentDb.TableDefs(Item), Пункт должен быть порядковый номер по TableDef «s или Имя собственности. (Смотрите тему TableDefs Коллекция в справочной системе Access'.)

Но вы даете ему TDF, а TableDef объект, так как Пункт. Это несоответствие вызывает ошибку. Вы могли бы избежать ошибок путем подачи 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