我试图更新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 & "'))")
希望你可以提供帮助,但不要理解何时放置'或者"。
/卡米拉
答案 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