访问VBA - ADO记录集 - 没有给出一个或多个必需参数的值

时间:2015-08-04 19:12:12

标签: access-vba ms-access-2013

尝试使用ADO查询数据库时,我遇到了此错误。通过搜索我发现这可能意味着我正在使用的SQL存在问题。

    Dim rs As Object
    Dim varGetRows As Variant
    Dim sqlStr As String

    sqlStr = "SELECT qryEmpRewardsDetail.PBRID, qryEmpRewardsDetail.ActualReward, qryEmpRewardsDetail.ProratedActual, qryEmpRewardsDetail.Adjust, qryEmpRewardsDetail.Total, qryEmpRewardsDetail.Prorated FROM qryEmpRewardsDetail WHERE qryEmpRewardsDetail.ReviewYearID=8 AND qryEmpRewardsDetail.EmployeeID=30 AND qryEmpRewardsDetail.TypeID=1;"

    Set rs = CreateObject("ADODB.Recordset")
        rs.Open sqlStr, CurrentProject.Connection
    varGetRows = rs.GetRows()

我已经用几种不同的方式重新编写了它,检查了拼写一百次并将其复制并粘贴到一个运行良好的访问查询中。

对于我的生活,我无法弄清楚它可能出现的问题。关于它可能是什么的任何想法或关于如何缩小问题的一些建议?

谢谢!

1 个答案:

答案 0 :(得分:0)

这会运行吗?

SELECT * FROM qryEmpRewardsDetail WHERE qryEmpRewardsDetail.ReviewYearID=8 AND qryEmpRewardsDetail.EmployeeID=30 AND qryEmpRewardsDetail.TypeID=1

如果确实如此,那么你可能拼错了一个字段,一个接一个地添加,直到开心。

否则,请尝试删除每个WHERE条件并在每个条件之间进行测试。

完全定义您的记录集只是为了安全:

Dim rst As ADODB.Recordset
Set rst = New ADODB.Recordset
rst.ActiveConnection = CurrentProject.Connection
rst.CursorType = adOpenDynamic
rst.LockType = adLockReadOnly

rst.Open sqlStr

If rst.BOF and rst.EOF Then
    'no records returned
End If

Do While Not rst.EOF
    'Doing stuff with row
    rst.MoveNext
Loop