1

我一直面临错误 3061 错误消息“参数太少:预期 2”。我已完成以下所有操作来解决问题,但仍然无法解决。

  1. 我在 SQL 模式下运行查询,它给了我结果
  2. 我检查了所有字段名称
  3. 我检查了所有 "&" 的位置。我觉得他们是对的。

这是我的代码:

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
4

4 回答 4

9

您的表似乎包含一个名为Program/School_ID的字段。在语句中将该字段名称括起来,SELECT以便数据库引擎可以正确地将其识别为一个字段名称。

这种改变可能就是你所需要的。但是,如果您还有其他问题,请给自己一个机会来检查SELECT您提供给 db 引擎的完整语句。这可能不是你所期望的。

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+ g),从那里复制语句文本,在查询设计器中打开一个新查询,切换到 SQL 视图,粘贴语句文本并尝试在那里运行它。当 db 引擎抱怨缺少参数时,此提示特别有用,因为当您尝试从设计器运行查询时,Access 将显示一个输入框,要求您提供一个值,并且该框还包含 Access 认为的任何名称是参数。

于 2013-08-29T17:02:42.667 回答
0

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

于 2014-01-15T14:00:26.150 回答
0

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

于 2017-05-31T01:05:16.470 回答
0

我也有这个问题,我意识到这是因为我没有在变量周围加上引号。

这是通过在我的变量周围添加“& Chr(34)”来解决的

我的固定代码如下所示:

TextProducer = [Forms]![MyFormName]![TextInputBoxName]
strQuery = "SELECT FILEMASK" & _
" FROM TABLE_NAME" & _
" WHERE Producer = " & Chr(34) & TextProducer & Chr(34)
于 2020-12-03T01:34:54.803 回答