MS Access подготовил заявления - PullRequest
11 голосов
/ 04 июля 2011

Можно ли выполнить подготовленный оператор в MS Access для локальной таблицы в VBA следующим образом:

UPDATE part SET part_description=? WHERE part_id=?

Если так, как это делается?

1 Ответ

16 голосов
/ 04 июля 2011
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. .Value - это свойство по умолчанию для Parameter, поэтому указывать его здесь не обязательно.С другой стороны, это не помешает быть явным.
  2. Как отметил Горд ниже, вы можете использовать «нотацию взрыва» с именем параметра, например !which_id, что более кратко, чем .Parameters("which_id")
...