2015-09-28 2 views
2

Это, казалось бы, простая задача мне теперь остановился как вкопанный в течение трех дней.OpenRecordset Метод Проблема слишком мало параметров

Мой код:

Dim rs As DAO.Recordset 

Set rs = CurrentDb.OpenRecordset("qryAutoOrder", dbOpenDynaset) 

qryAutoOrder является запрос на выборку, который работает просто отлично само по себе и не имеет параметров (если критериев подсчета построитель запросов).

Когда код работает он висит на set rs = линии и выдает эту ошибку.

Ошибка времени выполнения '3061': Слишком мало параметров. Ожидаемый 1.

Существует больше кода, в котором я хотел бы, чтобы он запускал цикл для каждой записи в результатах запроса, чтобы я мог добавлять данные в другие существующие таблицы баз данных, но в настоящее время они закомментированы.

+0

Имеет ли запрос ссылку на значение текстового поля на форме или на любой тип элемента управления в форме? – HansUp

+0

Запрос, который он ссылается. 'completeRFSparts' ссылки' [Forms]! [completeRepair]! [txtRepairID] ' – ctall

+0

Но при выполнении сценария, форма открыта, и я подумал, что было бы передать значение обходились без дополнительной меры принимаются. – ctall

ответ

2

OpenRecordset не разрешает ссылку вида ([Forms]![completeRepair]![txtRepairID]) в запросе. В этой ситуации он интерпретируется как параметр, для которого вы не указали значение.

Так дайте ему значение параметра с помощью Eval(prm.Name) ...

Dim rs As DAO.Recordset 
Dim db As DAO.database 
Dim prm As DAO.Parameter 
Dim qdf As DAO.QueryDef 

'Set rs = CurrentDb.OpenRecordset("qryAutoOrder", dbOpenDynaset) 
Set db = CurrentDb 
Set qdf = db.QueryDefs("qryAutoOrder") 
For Each prm In qdf.Parameters 
    prm.value = Eval(prm.Name) 
Next 
Set rs = qdf.OpenRecordset(dbOpenDynaset) 

Вы на самом деле не нужен For цикла там; это именно то, как я устанавливал их по привычке. Но вы могли бы просто дать ему единственное значение параметра ...

qdf.Parameters(0).Value = [Forms]![completeRepair]![txtRepairID] 
+0

Я даже не собираюсь притворяться, что понимаю, что вы сделали с prm, но он работает без ошибок. Теперь, чтобы сделать сделать, пока не rs.EOF работы. – ctall

+0

На самом деле я допустил ошибку. Исправлено, но не уверен, что он будет более ясным. 'qdf.Parameters' - это набор параметров, ожидаемых запросом. 'Параметры (0)' - первый из них; в этом случае единственным параметром. Если вы используете 'подход For' цикла,' prm.Name' даст вам параметр "имя" --- '[Forms]! [CompleteRepair]! [TxtRepairID]' и 'Eval (prm.Name)' даст вы значение от '[Forms]! [completeRepair]! [txtRepairID]' – HansUp

+0

awesome. Я очень ценю помощь и объяснение. – ctall

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