2015-06-26 5 views
4

Я использую VBA для передачи параметра в сохраненный запрос, но продолжаю получать ошибку. Здесь хранится запрос:Слишком мало параметров. (1) Ожидаемый

PARAMETERS Parm1 Long; 
UPDATE tJ010_SRP4Codes INNER JOIN tZ100_VendorProfiles 
ON tJ010_SRP4Codes.SRP4Code = tZ100_VendorProfiles.JdeSRP4Code 
SET tJ010_SRP4Codes.Vendor = 'TEST' 
WHERE ((([Parm1]=tZ100_VendorProfiles.VendorID))); 

Вот VBA, который вызывает запрос:

Dim Parm1 As Long 
db.QueryDefs(!QueryName).Parameters(Parm1) = intVdrProfileID 
db.Execute !QueryName, dbFailOnError 

Я попытался с и без «Параметры ...» линия в сохраненный запрос. Такая же ошибка в обоих направлениях. Сохраненный запрос работает отлично, но не при вызове из VBA.

ответ

2

Используйте DAO.QueryDef объект, поставить значение параметра, и выполнить QueryDef

Dim qdf As DAO.QueryDef 
Set qdf = db.QueryDefs(!QueryName) 
qdf.Parameters("Parm1").Value = intVdrProfileID 
qdf.Execute dbFailOnError 

Parameters("Parm1") означает параметр с именем parm1. Без котировок там, Parameters(Parm1), Access будет интерпретировать Parm1 быть переменной. Если у вас нет такой переменной, это вызовет ошибку.

Также возможно определить параметр по номеру вместо имени. Нумерация основана на нуле, поэтому Parameters(0) означает первый параметр.

Примечание. Предполагалось, что !QueryName является значением набора записей и является именем сохраненного запроса. И я не знаю, откуда приходит intVdrProfileID, но предположим, что он действителен для значения параметра.

+0

Добавление двойных кавычек вокруг «Parm1» и добавление «.value» не повредило, но изменение «db.execute» на «qdf.execute» заставило все работать. –

+0

С 'Dim Parm1 As Long',' Parm1' инициализируется до нуля. Затем, если вы не присвоите ему другое значение позже, «Параметры (Parm1)» будут такими же, как «Параметры (0)». Так что да, это может работать в этой ситуации, но я не думал, что это то, что вы на самом деле предназначенный для * Parm1 *. И если это то, что вы намеревались все время, я думаю, что было бы не так просто использовать 'Parameters (0)' в первую очередь. – HansUp

Смежные вопросы