1

我有一个按钮,它执行一些列出文件及其创建日期的 vba 代码。我对带有日期时间格式插入的 sql 插入感到困惑。该错误在 db.execute 时返回代码 128。有任何想法吗?

Do While Len(strFile) > 0
    'Debug.Print strFolder & strFile

        sSQL = "INSERT INTO tblVideos ( FileName , FileDate) VALUES ('" & strFile & "'," & Format(StrToDate(dateCreated(strFolder & strFile)), "\#yyyy-mm-dd hh:nn:ss\#") & ")"

        Debug.Print sSQL

        db.Execute sSQL, dbFailOnError

    strFile = Dir()
Loop

end sub 

Public Function StrToDate(strIn As String) As Variant
    Dim var As Variant
    Dim yr As Variant

    If Len(strIn & "") Then
        'StrToDate = CDate(Mid$(strIn, 3, 4) & "/" & Left$(strIn, 2) & "/" & Right$(strIn, 4))
        var = Split(strIn, "/")
        yr = Split(var(2), " ")
        StrToDate = var(0) & "/" & var(1) & "/" & yr(0) & " " & yr(1)
    Else
        StrToDate = Null
    End If
End Function
4

3 回答 3

2

您在此行收到错误 128:

db.Execute sSQL, dbFailOnError

如果INSERT语句有问题,您会从 db 引擎收到错误消息。但是,错误 128, "Application-defined or object-defined error"是来自 Access 的 VBA 主机的错误,而不是来自 db 引擎的错误。这让我怀疑问题不在于INSERT语句 ( sSQL),而在于该行中的其他内容。

你没有展示你如何声明db并赋予它一个价值。为了使它Execute工作,db必须是一个有效的DAO.Database对象引用。

如果您的设置正确,这应该会向您显示 db 文件的完整路径...

Debug.Print db.Name

如果这给您一个错误,或者除了 db 文件路径之外的任何其他内容,请检查您如何设置db. 通常它被设置为像这样的当前数据库......

Dim db As DAO.Database
Set db = CurrentDb

db如果您需要帮助,请向我们展示您的设置方式。

于 2013-08-08T11:17:36.063 回答
0

什么是“datecreated()”,您是否将日期、字符串、日期、字符串转换为日期?

DateCreated returns date
StrToDate implicitly converts parameter to string
StrToDate takes string and converts it to date
Format takes date and converts it to string
SQL takes string and converts it to date.

如果 DateCreated 返回一个日期,则

sSQL = "INSERT INTO tblVideos ( FileName , FileDate) VALUES ('" & strFile & "', dateCreated(" & strFolder & strFile & "))"

值不必是字符串,它们可以是数字或日期(数字的特殊情况)。

即使我在日期字段中插入字符串,我也不总是使用“格式”来执行此操作。如果您只是使用 Access/VBA,CDBL 也可以:

SQL = "WHERE (mydate = " & cdbl(myOtherDate) & ")"

CDBL 避免了正确获取年/月/日顺序的所有问题,但只有在数据库日期字段与 VBA 日期值具有相同结构时才能正常工作。Access MDB 就是这种情况,但 SQL Server 不是(SQL Server 中的日期不是 CDBL)。

于 2013-08-08T10:42:58.937 回答
0

也许这可以帮助你?

如何为 Access 和 SQL Server 的兼容日期格式编码

'/////// ASSIGN A FORMAT BASED ON 'TIME STAMP' OR 'DATE'
If UseTimeAndDate Then
  '---- DATE & TIME
  strDate = "{ts '" & Format(DateToConvert, "yyyy-mm-dd hh:mm:ss") & "'}"
Else
  '----- DATE
  strDate = "{d '" & Format(DateToConvert, "yyyy-mm-dd") & "'}"
End If
于 2013-08-08T05:08:22.277 回答