2013-10-14 50 views
0

我有這樣的SQL查詢沒有價值的一個或多個必需參數

cmd.CommandText = "SELECT [tblStudent]![LastName] & ', ' & [tblStudent]![FirstName] & ' ' & [tblStudent]![MiddleName] AS FullName," & _ 
" tblGrade.FirstGrading, tblGrade.SecondGrading, tblGrade.ThirdGrading, tblGrade.FourthGrading," & _ 
" Avg(b.GradeValue) AS AverageGrade" & _ 
" FROM ((((tblGrade INNER JOIN tblEnrolment ON tblGrade.EnrolmentID=tblEnrolment.EnrolmentID)" & _ 
    " INNER JOIN tblStudent ON tblStudent.StudentID=tblEnrolment.StudentID)" & _ 
    " INNER JOIN tblSubjectOffering ON tblSubjectOffering.SubjectOfferingID=tblGrade.SubjectOfferingID)" & _ 
    " INNER JOIN tblSubject ON tblSubject.SubjectID=tblSubjectOffering.SubjectID)" & _ 
    " INNER JOIN tblSection ON tblSection.SectionID=tblSubjectOffering.SectionID" & _ 
" WHERE tblSection.SectionTitle='" & s(0) & "' AND tblSubject.SubjectID='" + s2(0) + "'" & _ 
" GROUP BY [tblStudent]![LastName] & ', ' & [tblStudent]![FirstName] & ' ' & [tblStudent]![MiddleName], tblGrade.FirstGrading, tblGrade.SecondGrading, tblGrade.ThirdGrading, tblGrade.FourthGrading" & _ 
" ORDER BY [tblStudent]![LastName] & ', ' & [tblStudent]![FirstName] & ' ' & [tblStudent]![MiddleName]" 

而這個代碼給了我一個運行時錯誤「沒有價值的一個或多個必需參數」。

回答

2

我的預感是訪問認爲b.GradeValue是一個參數,因爲沒有表名或別名b

Avg(b.GradeValue) AS AverageGrade 

我建議你Debug.Print完成SELECT聲明,或將其寫入到一個文本文件,然後進行測試它作爲Access查詢設計器中的新查詢。當它要求您提供參數值時,它還會向您顯示「名稱」,它表示它認爲是參數。

1

很難提供只有SQL語句的建議,與您的其他代碼和對象沒有聯繫。

就目前而言,我看到兩個主要的潛在問題。首先是您有Avg(b.GradeValue),但在命令的其他地方沒有提及b表。爲此,您需要刪除b或確保參考有效。其次,你有兩個變量,s()s2()可能返回無效或空數據。您可能需要調試此步驟,然後在讓它繼續進行之前檢查這些保持的值,然後在代碼的其他部分修復問題(如果有問題的話)。

+0

我不明白你的第三段。當s(0)和s2(0)爲空時,得到的SQL將是'WHERE tblSection.SectionTitle =''AND tblSubject.SubjectID ='''這可能不是他想要的'WHERE',但它不應該導致缺少參數問題。 – HansUp

+0

你可能是對的。在我努力刪除所有VBA/Access殘留(所以它看起來像正常的SQL我分析),我必須刪除額外的單引號。儘管如此,有可能導致無效值出現問題,這可能與此有關......這就是在一個問題中存在這樣的孤立片段的問題。 – techturtle

+0

我不確定這裏發生了什麼事情。我懷疑OP會更好地在Access中創建和測試參數查詢,將其保存爲命名查詢,然後使用運行時提供的參數值從VB6執行該查詢。 – HansUp

相關問題