使用变量访问vba的sql更新

使用变量访问vba的sql更新,sql,ms-access,vba,Sql,Ms Access,Vba,我正在尝试更新Access VBA中的一个表,但它一直失败,所以我真的希望你们中的一位能够提供帮助。 基本上,我想更新表tblLog,即使用变量logOutTime注销的字段,其中LogID等于当前表单中的LogID 第一个给出了错误“3075” 希望你能帮忙,只是不明白什么时候该放‘或’ /Camilla动态SQL,即按照您建议的方式将SQL语句“粘合在一起”的过程,应尽可能避免。它繁琐、容易出错且有潜在危险。(有关详细信息,请在web上搜索“SQL注入”) 相反,您应该使用参数化查询。您创建

我正在尝试更新Access VBA中的一个表,但它一直失败,所以我真的希望你们中的一位能够提供帮助。 基本上,我想更新表tblLog,即使用变量logOutTime注销的字段,其中LogID等于当前表单中的LogID

第一个给出了错误“3075”

希望你能帮忙,只是不明白什么时候该放‘或’

/Camilla

动态SQL,即按照您建议的方式将SQL语句“粘合在一起”的过程,应尽可能避免。它繁琐、容易出错且有潜在危险。(有关详细信息,请在web上搜索“SQL注入”)

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

在这种情况下,您的优势在于不必担心日期格式。Access在解释格式为
dd-mm-yyyy
的日期时有自己的特点,多年来这造成了一定程度的混乱

因此,您应该真正使用参数化查询,在Access中,这是通过使用
QueryDef
对象来完成的,如下所示:

Dim cdb作为DAO.Database,qdf作为DAO.QueryDef
设置cdb=CurrentDb
设置qdf=cdb.CreateQueryDef(“”_
参数prmLogOutTime DATETIME,prmLogId LONG;&_
“更新tblLog集合LogUd=[prmLogOutTime]其中LogId=[prmLogId]”)
qdf!prmLogOutTime=Now()
qdf!prmLogId=Me.LogId
qdf.executedbfailonerror
设置qdf=无
设置cdb=无
是的,这需要做更多的工作,但它是值得的。

动态SQL,即按照您建议的方式将SQL语句“粘合在一起”的过程,应该尽可能避免。它繁琐、容易出错,并且有潜在的危险。(有关更多信息,请在web上搜索“SQL注入”)

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

在这种情况下,您的优势在于不必担心日期格式。Access在解释格式为
dd-mm-yyyy
的日期时有自己的特点,多年来这造成了一定程度的混乱

因此,您应该真正使用参数化查询,在Access中,这是通过使用
QueryDef
对象来完成的,如下所示:

Dim cdb作为DAO.Database,qdf作为DAO.QueryDef
设置cdb=CurrentDb
设置qdf=cdb.CreateQueryDef(“”_
参数prmLogOutTime DATETIME,prmLogId LONG;&_
“更新tblLog集合LogUd=[prmLogOutTime]其中LogId=[prmLogId]”)
qdf!prmLogOutTime=Now()
qdf!prmLogId=Me.LogId
qdf.executedbfailonerror
设置qdf=无
设置cdb=无
是的,这需要做更多的工作,但它是值得的。

动态SQL,即按照您建议的方式将SQL语句“粘合在一起”的过程,应该尽可能避免。它繁琐、容易出错,并且有潜在的危险。(有关更多信息,请在web上搜索“SQL注入”)

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

在这种情况下,您的优势在于不必担心日期格式。Access在解释格式为
dd-mm-yyyy
的日期时有自己的特点,多年来这造成了一定程度的混乱

因此,您应该真正使用参数化查询,在Access中,这是通过使用
QueryDef
对象来完成的,如下所示:

Dim cdb作为DAO.Database,qdf作为DAO.QueryDef
设置cdb=CurrentDb
设置qdf=cdb.CreateQueryDef(“”_
参数prmLogOutTime DATETIME,prmLogId LONG;&_
“更新tblLog集合LogUd=[prmLogOutTime]其中LogId=[prmLogId]”)
qdf!prmLogOutTime=Now()
qdf!prmLogId=Me.LogId
qdf.executedbfailonerror
设置qdf=无
设置cdb=无
是的,这需要做更多的工作,但它是值得的。

动态SQL,即按照您建议的方式将SQL语句“粘合在一起”的过程,应该尽可能避免。它繁琐、容易出错,并且有潜在的危险。(有关更多信息,请在web上搜索“SQL注入”)

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

在这种情况下,您的优势在于不必担心日期格式。Access在解释格式为
dd-mm-yyyy
的日期时有自己的特点,多年来这造成了一定程度的混乱

因此,您应该真正使用参数化查询,在Access中,这是通过使用
QueryDef
对象来完成的,如下所示:

Dim cdb作为DAO.Database,qdf作为DAO.QueryDef
设置cdb=CurrentDb
设置qdf=cdb.CreateQueryDef(“”_
参数prmLogOutTime DATETIME,prmLogId LONG;&_
“更新tblLog集合LogUd=[prmLogOutTime]其中LogId=[prmLogId]”)
qdf!prmLogOutTime=Now()
qdf!prmLogId=Me.LogId
qdf.executedbfailonerror
设置qdf=无
设置cdb=无
是的,这是一个多一点的工作,但它是值得的。

卡米拉, 您说过要更新字段注销,但在SQL代码中没有提到此字段;)

试试这个:

mySQL = "UPDATE [tblLog] SET [LogOut]='" & vba.format(logOutTime,"yyyy-mm-dd hh:mm:ss") & "' WHERE [Logid] =" & Me.LogID
卡米拉, 您说过要更新字段注销,但在SQL代码中没有提到此字段;)

试试这个:

mySQL = "UPDATE [tblLog] SET [LogOut]='" & vba.format(logOutTime,"yyyy-mm-dd hh:mm:ss") & "' WHERE [Logid] =" & Me.LogID
卡米拉, 您说您想更新字段注销,但在您的
mySQL = "UPDATE [tblLog] SET [LogOut]='" & vba.format(logOutTime,"yyyy-mm-dd hh:mm:ss") & "' WHERE [Logid] =" & Me.LogID