带变量的sql UPDATE访问vba

时间:2014-11-26 09:25:46

标签: sql ms-access access-vba

我试图更新Access VBA中的表并且它一直在失败,所以我真的希望你们中的一个可以提供帮助。 基本上我想更新表tblLog,字段LogOut和变量logOutTime,其中LogID等于当前表单的LogID。

第一个错误" 3075"

Dim mySQL As String
Dim logOutTime As String
logOutTime = Now()

    mySQL = "UPDATE [tblLog] SET [LogUd]=" & logOutTime & " WHERE [Logid] =" & Me.LogID & ""
    DoCmd.RunSQL mySQL

第二个给了我错误" 3464"

DoCmd.RunSQL ("UPDATE tblLog " _
& "SET LogUD='" & logOutTime & "' " _
& "WHERE (((LogID)='" & Me.LogID & "'))")

希望你可以提供帮助,但不要理解何时放置'或者"。

/卡米拉

2 个答案:

答案 0 :(得分:2)

动态SQL ,应尽可能避免以您建议的方式“粘合”SQL语句的过程。它很挑剔,容易出错,而且有潜在危险。 (有关详细信息,请搜索“SQL注入”。)

相反,您应该使用参数化查询。使用表示参数的占位符创建查询,将实际正确键入的值分配给参数,然后执行查询。

在这种特殊情况下,您的优势在于您不必担心日期格式。 Access在解释格式为dd-mm-yyyy的日期时有其独特之处,并且多年来引起了一定程度的混淆。

因此,您应该使用参数化查询,在Access中使用QueryDef对象完成,如下所示:

Dim cdb As DAO.Database, qdf As DAO.QueryDef
Set cdb = CurrentDb
Set qdf = cdb.CreateQueryDef("", _
        "PARAMETERS prmLogOutTime DATETIME, prmLogId LONG; " & _
        "UPDATE tblLog SET LogUd = [prmLogOutTime] WHERE LogId = [prmLogId]")
qdf!prmLogOutTime = Now()
qdf!prmLogId = Me.LogId
qdf.Execute dbFailOnError
Set qdf = Nothing
Set cdb = Nothing

是的,这是一项更多的工作,但这是值得的。

答案 1 :(得分:1)

卡米拉, 你说你想更新字段 LogOut 但是你的SQL代码中没有提到这个字段;)

试试这个:

mySQL = "UPDATE [tblLog] SET [LogOut]='" & vba.format(logOutTime,"yyyy-mm-dd hh:mm:ss") & "' WHERE [Logid] =" & Me.LogID