【问题标题】:Run-time error 3061 Too few Parameters. Expected 2运行时错误 3061 参数太少。预计 2
【发布时间】:2017-01-24 17:06:06
【问题描述】:

谁能告诉我这段代码有什么问题?我检查了所有行是否有拼写错误——这不是问题。所有表和查询都按照它们存在于数据库中的方式编写。任何帮助表示赞赏。

Private Sub LoadArray()
    '---------------------------
    '---------------------------
    'This procedure loads text into the 3rd column of the array
    '---------------------------
    '---------------------------

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim rsFiltered As DAO.Recordset
    Dim strSQL As String
    Dim i As Integer

    strSQL = "SELECT tblProperties.Name, tbl1OpportuniyType.Type, qryPropertiesALLTypesALLTbls.TotalUnits, " _
    & "qryPropertiesALLTypesALLTbls.EventStartTimeEachDay, qryPropertiesALLTypesALLTbls.EventEndTimeEachDay, " _
    & "qryPropertiesALLTypesALLTbls.EventStartDate, qryPropertiesALLTypesALLTbls.EventStopDate, " _
    & "qryPropertiesALLTypesALLTbls.TechOpsGroup, qryPropertiesALLTypesALLTbls.TechOpsResource " _
    & "FROM tbl1OpportuniyType RIGHT JOIN (qryPropertiesALLTypesALLTbls INNER JOIN tblProperties ON qryPropertiesALLTypesALLTbls.[PropertyComplex_ID] = tblProperties.[PropertyComplex_ID]) ON tbl1OpportuniyType.[OpportunityType_ID] = tblProperties.OpportunityType " _
    & "WHERE (((qryPropertiesALLTypesALLTbls.EventStartDate) Is Not Null));"



    'Debug.Print strSQL

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

        'This line ensures that the recordset is populated
        If Not rs.BOF And Not rs.EOF Then

        'Loops through the Array using dates for the filter

         For i = LBound(myArray) To UBound(myArray)

        If myArray(i, 1) Then
        'Filters recordset with array dates

         rs.Filter = "[EventStartDate]= " & myArray(i, 0)

        'Open up new recordset based on filter
        Set rsFiltered = rs.OpenRecordset

        'Loop through new recordset
        Do While (Not rsFiltered.EOF)

            'Adds text to the 3rd column of the array
            myArray(i, 2) = myArray(i, 2) & vbNewLine _
            & rsFiltered!Type & " - " & vbNewLine _
            & rsFiltered!Name & " " _
            & rsFiltered!EventStartDate & " - " _
            & rsFiltered!EventStopDate & " " _
            & rsFiltered!EventStartTimeEachDay & " - " _
            & rsFiltered!TechOpsGroup & " " _
            & rsFiltered!TechOpsResource & " " _
            & vbNewLine

        rsFiltered.MoveNext

        Loop


        End If

        Next i


        End If
        rsFiltered.Close
        rs.Close

    'Sets objects to nothing
    Set rsFiltered = Nothing
    Set rs = Nothing
    Set db = Nothing


    End Sub

【问题讨论】:

  • 您收到什么错误?另外,为什么要使用两个记录集?我不确定您的预期结果是什么,但您应该能够通过将方法保持在一个记录集来精简您的代码。另外...您可以尝试在循环之前添加 rs.movelast 和 rs.movefirst 。这样一来,您始终指向收藏中的第一条记录。
  • 这篇文章可以比我更好地解释记录集。 accessallinone.com/…
  • 我希望您的查询中出现错误。删除查询中的变量并用表中的虚拟数据填充它们并对其进行测试。如果可行,则开始一一添加变量,直到将它们全部替换。这样,您就可以有效地隔离代码中出错的地方。用我的一位导师的话来说,软件开发人员 90% 的工作是寻找丢失的分号。
  • 查询 qryPropertiesALLTypesALLTbls 是否引用了打开的表单 (forms!someform!somecontrol)? Debug.print strSQL,然后将其复制/粘贴到查询设计器的 SQL 视图中并运行它。源头会显露出来。
  • 关于 qryPropertiesALLTypesALLTbls 的问题不是是否有必要。它是否包含一个打开表单的引用(forms!someform!somecontrol)?错误到底发生在哪一行?

标签: database ms-access vba


【解决方案1】:

不清楚myArray来自哪里,但过滤器需要调整才能将日期值转换为字符串表达式:

rs.Filter = "[EventStartDate] = #" & Format(myArray(i, 0), "yyyy\/mm\/dd") & "#"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2014-04-06
    • 1970-01-01
    相关资源
    最近更新 更多