MS Access参数化查询VB

时间:2014-10-06 20:10:58

标签: sql ms-access-2010

dbs.Execute " INSERT INTO Log " _
  & "(UserName, DateAccessed) VALUES " _
  & "(@GetLogonName, @Today);"  

GetLogonName和今天是变量,但我得到错误“错误 - 参数太少,预计两个”。如果我使用实际值(如&“('abce','2/2/2012')运行该函数,则可以正常工作。

我做错了什么?

由于

1 个答案:

答案 0 :(得分:3)

Database.Execute不接受查询参数,只接受RecordsetOptionEnum中定义的执行选项。

要运行参数化查询,您需要创建一个QueryDef对象:

Dim query As QueryDef
Set query = dbs.CreateQueryDef("", "INSERT INTO LOG (UserName,DateAccessed)" & _
                                         " VALUES(@user,@time)")
query.Parameters("@user").Value = "Moo"
query.Parameters("@time").Value = Now
query.Execute

空字符串表示这是一个临时的QueryDef。如果输入任何其他名称或完全省略名称,将在数据库中创建新的Query对象。

如果您经常使用相同的查询,最好创建一个查询并按名称调用它:

Set query = dbs.QueryDefs("myQueryName")
...

QueryDef.Execute接受与Database.Execute

相同的执行参数