2013-12-23 59 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