2013-12-23 3 views
1

Рыба из воды в поисках направления/рекомендации не обязательно кода (хотя это было бы полезно). Я ME, который проектирует машины для жизни, и я пытаюсь автоматизировать существующую базу данных Access 2010, используемую для технических номеров деталей. Я хочу, чтобы пользователь выбирал номер проекта, а следующий номер доступной детали автоматически отображался в поле номера детали.Доступ к параметру запроса от элемента управления

Я попытался безуспешно использовать примеры ADO и DAO из различных источников, чтобы передать параметр, основанный на значении элемента управления формой для запроса выбора. Моя последняя попытка выглядит следующим образом:

Private Sub ctlProject_AfterUpdate() 

Dim dblProject As Double 

dblProject = Me.ctlProject.Value 

MsgBox "The curret project number is " & dblProject, vbOKOnly, "Project Number" 


Const cstrQueryName As String = "qryDetails" 
Dim dbs As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim rst As DAO.Recordset 

Set dbs = CurrentDb() 
Set qdf = dbs.QueryDefs(cstrQueryName) 
qdf.Parameters("Project") = dblProject 

' Open recordset on the query 
Set rst = qdf.OpenRecordset() 

rst.MoveLast 

Debug.Print ("Project ID: " & rst!Project) 

rst.Close 
qdf.Close 
dbs.Close 

End Sub 

код производит «Run-Time Error„3265“Элемент не найден в этой коллекции.», Вытекающей из этой строки кода:

qdf.Parameters("Project") = dblProject 

Первоисточник код here

У меня были аналогичные сбои с использованием объекта команды ADO. Я был бы очень признателен за любую помощь или рекомендации за ссылки/ресурсы. Я использую «Руководство для программистов VBA 2003» от WROX и «Access 2010: недостающее руководство» в качестве справочных материалов.

Вот код, с точки зрения SQL из qryDetails:

SELECT tblDetails.Project, tblDetails.Number, tblDetails.Title, tblDetails.Initials, 
tblDetails.IssuedOn 
FROM tblDetails 
WHERE (((tblDetails.Project)=[Project])); 
+3

Глупый вопрос, но, судя по вашей ошибке, вы уверены, что запрос 'qryDetails' ожидает параметра« Проект »? – Lankymart

+1

Пожалуйста, покажите нам SQL из 'qryDetails'. – HansUp

+0

@ Lankymart Короткий ответ - я так думаю. В ответ на запрос @HansUp я добавил представление SQL из 'qryDetails'. – user3042766

ответ

1

Я скептически проекта в качестве имени параметра, поскольку имеется поле с тем же именем. Это также зарезервированное слово, но я не уверен, что это лишний вызов здесь.

Редакция qryПодробности использовать другое имя для параметра.

SELECT tblDetails.Project, tblDetails.Number, tblDetails.Title, tblDetails.Initials, 
tblDetails.IssuedOn 
FROM tblDetails 
WHERE (((tblDetails.Project)=[pProject])); 

И не забудьте пересмотреть VBA, чтобы использовать это новое имя ...

qdf.Parameters("pProject") = dblProject 

Если у вас возникли проблемы после этих изменений, посмотрим, что думает о Access параметра запроса (ы).

Const cstrQueryName As String = "qryDetails" 
Dim dbs As DAO.Database 
Dim prm As DAO.Parameter 
Dim qdf As DAO.QueryDef 

Set dbs = CurrentDb() 
Set qdf = dbs.QueryDefs(cstrQueryName) 
MsgBox "Parameters.Count: " & qdf.Parameters.Count 
For Each prm In qdf.Parameters 
    MsgBox "Parameter Name: " & prm.Name 
Next 
Смежные вопросы