MS Access准备好的声明

Dav*_*vid 11 ms-access vba access-vba

是否可以在VBA中的本地表上的MS Access中执行预准备语句,如下所示:

UPDATE part SET part_description=? WHERE part_id=?
Run Code Online (Sandbox Code Playgroud)

如果是这样怎么办?

Han*_*sUp 16

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
Run Code Online (Sandbox Code Playgroud)

该示例使用了一个未保存的新文件QueryDef.如果您有一个已保存的参数查询,则可以通过将此行替换为该行来使用它CreateQueryDef:

Set qdf = db.QueryDefs("YourQueryName")
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,您都可以按照我的名字或者在SQL语句中的位置来引用各个参数......所以这将与上面相同:

.Parameters(0).Value = Date()
.Parameters(1).Value = 1
Run Code Online (Sandbox Code Playgroud)

补充说明:

  1. .Value是a的默认属性Parameter,因此在此处包含它不是严格要求的.另一方面,明确表示没有坏处.
  2. 正如戈德在下面提到的那样,你可以使用参数名称的"Bang notation", !which_id比这更简洁.Parameters("which_id")

  • "Bang notation"也适用于设置参数值,例如`qdf!which_id = 1` (3认同)