2013-08-29 157 views
1

我一直面对错误消息3061,并显示错误消息“参数太少:预期2”。我已经完成了以下所有内容来解决问题,但仍然无法解决问题。错误3061预计参数2太少

  1. 我跑SQL模式查询,这让我产生
  2. 我查了所有字段名
  3. 我查了所有的“&” S放置。我发现他们是正确的。

这里是我的代码:

Private Sub cmbYear_Change() 

    Dim db As Database 
    Dim rs As DAO.Recordset 
    Dim Query As String 

    Query = " SELECT Yrs_Teaching, Highest_Edu, AD_Descr FROM ClassSurvey" & _ 
      " WHERE ClassSurvey.Program/School_ID = " & Me.cmbProgId.Value & _ 
      " AND ClassSurvey.ClassID = " & Me.cmbClassId.Value & _ 
      " AND ClassSurvey.Teacher_ID = " & Me.cmbTeacherID.Value & _ 
      " AND ClassSurvey.SYear = " & Me.cmbYear.Value 


    Set db = CurrentDb 
    Set rs = db.OpenRecordset(Query) 

    If rs.RecordCount > 0 Then 
     Me.TB1 = rs!Yrs_Teaching 
     Me.TB2 = rs!Highest_Edu 
     Me.TB3 = rs!AD_Descr 

    Else 
     Me.TB1 = "N/A" 
    End If 

    Set rs = Nothing 
    Set db = Nothing 
End Sub 

回答

5

它出现在表中包含一个名为计划/学校ID场。在SELECT声明中包含该字段名称,以便数据库引擎可以将其正确识别为一个字段名称。

这种变化可能是你所需要的。但是如果你还有其他问题,给自己一个机会来检查你给数据库引擎完成的SELECT声明。它可能不是你所期望的。

Dim db As Database 
Dim rs As DAO.Recordset 
Dim strQuery As String 

strQuery = "SELECT cs.Yrs_Teaching, cs.Highest_Edu, cs.AD_Descr FROM ClassSurvey AS cs" & _ 
     " WHERE cs.[Program/School_ID] = " & Me.cmbProgId.Value & _ 
     " AND cs.ClassID = " & Me.cmbClassId.Value & _ 
     " AND cs.Teacher_ID = " & Me.cmbTeacherID.Value & _ 
     " AND cs.SYear = " & Me.cmbYear.Value 

Debug.Print strQuery 
Set db = CurrentDb 
Set rs = db.OpenRecordset(strQuery) 

如果你得到一个错误,你可以去立即窗口(按Ctrl),从那里开关复制语句文本,打开查询设计一个新的查询,以SQL视图,粘贴在语句文本中,并尝试在那里运行它。当数据库引擎抱怨缺少参数时,此提示特别有用,因为当您尝试从设计器运行查询时,Access会显示一个输入框,要求您提供一个值,并且该框还包含任何Access认为的名称是参数。

+0

它可以帮助我,谢谢。 – Alexey

0

我在找同样问题的解决方案时遇到了这个问题。原来,表单上的一个控件的值之一是没有将值传递给语句,将它发送到调试窗口(Debug.print)很长时间后帮助我发现问题,因为我使用的是全局变量, sql查询被解析。因此,请先将控件的值加载到变量中!

0

此错误可能是因为查询中的列名具有特殊字符。尝试使用SQL查询中的方括号来包围列名。带有特殊符号的列名应放在方括号内,变量应放在单引号内。