2013-12-23 62 views
1

鱼寻找方向/建议不一定代码(尽管这将是有益的)。我是一个以设计机器为生的ME,我试图自动化用于工程部件号的现有2010 Access数据库。我希望用户选择项目编号,并让下一个可用部件编号自动出现在部件编号字段中。从控制访问查询参数

我已经尝试过使用不同来源的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 

代码产生“运行时错误‘3265’项目在此集合中没有找到。”从这一行代码茎:

qdf.Parameters("Project") = dblProject 

原文出处代码here

我有类似的故障使用ADO命令对象。我将不胜感激对参考资料/资源的任何帮助或建议。我一直使用WROX的“Access 2003 vba程序员手册”和“Access 2010:缺少的手册”作为硬拷贝参考。

这里是qryDetails的SQL视图代码:

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

愚蠢的问题真的,但你的错误判断你确定查询'qryDetails'期待一个名为“项目”的参数? – Lankymart

+1

请向我们展示'qryDetails'中的SQL。 – HansUp

+0

@Lankymart简短的回答是我这么认为。为了响应@HansUp请求,我添加了来自'qryDetails'的SQL视图。 – user3042766

回答

1

我怀疑项目作为参数名,因为存在具有相同名称的字段。这也是一个保留字,但我不确定这是否是一个额外的挑战。

修改qryDetails使用不同的名称作为参数。

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

而且不要忘了修改VBA使用新的名称...

qdf.Parameters("pProject") = dblProject 

如果您还有那些变化后的麻烦,看看有什么想访问你的查询参数(S)。

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