【发布时间】:2021-08-24 23:05:25
【问题描述】:
我正在尝试遍历使用具有 2 个参数的查询生成的结果集。这些参数的值是从表单域(开始和结束日期)中读取的。由于 Access 抛出 运行时错误“3061”。参数太少。预期 2. 即使在表单字段中设置了值,我也尝试通过 VBA 使用 QueryDef 对象设置参数(下面给出代码)。
当开始日期和结束日期相同时它工作正常,但如果我选择不同的开始日期和结束日期,它将不会应用分配给查询参数的日期过滤器。
我尝试更改日期值的格式并将它们转换为另一种类型,但没有成功。
有没有人遇到过类似的问题? 任何帮助将不胜感激!
查询:
SELECT DISTINCT
tblComp_Payout.Agent_ID_int As [Agent ID],
tblExchOffices.Agent_Name AS Name
FROM
tblExchOffices
INNER JOIN
tblComp_Payout ON tblExchOffices.Agent_ID_int = tblComp_Payout.Agent_ID_int
WHERE
((DateValue([Paid_Date])) >= ([forms]![frmReporting]![txtDateFrom])
AND (DateValue([Paid_Date]))<=[forms]![frmReporting]![txtDateTo])
UNION
SELECT DISTINCT
tblComp_Sending.Agent_ID_int AS [Agent ID],
tblExchOffices.Agent_Name AS Name
FROM
tblExchOffices
INNER JOIN
tblComp_Sending ON tblExchOffices.Agent_ID_int = tblComp_Sending.Agent_ID_int
WHERE
((DateValue([Sending_Date])) >= ([forms]![frmReporting]![txtDateFrom])
AND (DateValue([Sending_Date]))<=[forms]![frmReporting]![txtDateTo]);
方法:
Private Sub iterate_Click()
On Error GoTo iterate_Err
Dim rs As DAO.Recordset
Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.QueryDefs("queAgentByDate")
qdf.Parameters.Refresh
If CurrentProject.AllForms("frmReporting").IsLoaded Then
qdf.Parameters("[forms]![frmReporting]![txtDateFrom]") = CStr([Forms]![frmReporting]![txtDateFrom])
qdf.Parameters("[forms]![frmReporting]![txtDateTo]") = CStr([Forms]![frmReporting]![txtDateTo])
Else
Beep
Resume iterate_Exit
End If
Set rs = qdf.OpenRecordset(dbOpenDynaset, dbSeeChanges)
MsgBox rs.RecordCount
If rs.EOF Then Exit Sub
With rs
Do Until .EOF
'Loop logic
Loop
End With
rs.Close
Set rs = Nothing
iterate_Exit:
Exit Sub
iterate_Err:
MsgBox Error$
Resume iterate_Exit
End Sub
【问题讨论】:
-
这不是您定义查询参数的方式([forms]![frmReporting]![txtDateFrom])。阅读一些有关查询参数的信息 - 在查询中将它们定义为日期,然后在查询和代码中使用参数名称
-
感谢 cmets!该链接非常有用,@June7。