从水中寻找方向/建议的鱼不一定是代码(虽然这会有所帮助)。我是一个设计机器的ME,我正在尝试自动化现有的用于工程零件编号的2010 Access数据库。我希望用户选择项目编号,并在零件编号字段中自动显示下一个可用的零件编号。
我尝试使用各种来源的ADO和DAO示例将基于表单控件值的参数传递给select查询失败。我的最新尝试如下:
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 Command对象时遇到了类似的故障。我非常感谢任何有关参考/资源的帮助或建议。我一直在使用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]));
答案 0 :(得分:1)
我对 Project 作为参数名称持怀疑态度,因为有一个具有相同名称的字段。这也是一个保留词,但我不确定这是否是一个额外的挑战。
修改 qryDetails 以为参数使用其他名称。
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