【问题标题】:Access VBA - ADO Recordset - No value given for one or more required parametersAccess VBA - ADO 记录集 - 没有为一个或多个必需参数提供值
【发布时间】:2015-08-04 19:12:11
【问题描述】:

我在尝试使用 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()

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

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

谢谢!

【问题讨论】:

  • 假设 qryEmpRewardsDetail 是一个已保存的查询,这可能是“缺失”参数的原因吗?如果您临时更改代码以使用此查询,您是否仍然收到缺少参数的投诉? SELECT * FROM qryEmpRewardsDetail;
  • 是的,这给了我同样的错误,但是当我用它创建一个保存的查询时它工作正常。知道为什么会这样吗?
  • 如果您向我们展示来自 qryEmpRewardsDetail 的 SQL,我们或许能够解决问题。
  • 好吧,我想我明白了。这是我引用的已保存查询的问题。它是不必要的复杂和简化它消除了问题。

标签: ms-access vba ms-access-2013


【解决方案1】:

这会运行吗?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多