MS Access 准备语句

11

在VBA中,是否可以像这样执行一个准备好的语句来操作本地的MS Access表:

UPDATE part SET part_description=? WHERE part_id=?

如果是这样,那该怎么做呢?

1个回答

18
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim strSql As String
Set db = CurrentDb
strSql = "UPDATE Month_Totals Set item_date = [which_date]" & _
    " WHERE id = [which_id];"
Debug.Print strSql
Set qdf = db.CreateQueryDef(vbNullString, strSql)
With qdf
    .Parameters("which_date").Value = Date()
    .Parameters("which_id").Value = 1
    .Execute dbFailOnError
End With

这个示例使用了一个新的未保存的QueryDef。如果您有一个已保存的参数查询,您可以使用它来替换CreateQueryDef这行:

Set qdf = db.QueryDefs("YourQueryName")

无论如何,您都可以像我一样按名称或在SQL语句中的位置引用单个参数...所以这将与上面的代码相同:

.Parameters(0).Value = Date()
.Parameters(1).Value = 1

附加说明:

  1. .ValueParameter 的默认属性,因此在此包含它并不是严格要求的。另一方面,明确指定也无妨。
  2. 如 Gord 在下面指出的那样,您可以像 !which_id 一样使用参数名称的 "Bang 符号",这比 .Parameters("which_id") 更为简洁。

3
“Bang符号”也可以用于设置参数值,例如 qdf!which_id = 1 - Gord Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接