【发布时间】:2014-11-30 13:18:48
【问题描述】:
我在 MS Access 中有以下存储查询
SELECT
tblRegistration.ID,
tblRegistration.TypeCode,
CDate([tblRegistration].[RegStart]) AS Reg1,
CDate([tblRegistration].[RegStop]) AS Reg2
FROM
tblRegistration
WHERE
(
(tblRegistration.TypeCode = "T" Or tblRegistration.TypeCode = "S" Or tblRegistration.TypeCode = "F")
AND
(CDate([tblRegistration].[RegStart]) Between CDate([Forms]![frmRegBilling]![RegStart]) And CDate([Forms]![frmRegBilling]![RegStop]))
)
OR
(
(tblRegistration.TypeCode = "T" Or tblRegistration.TypeCode = "S" Or tblRegistration.TypeCode = "F")
AND
(CDate([tblRegistration].[RegStop]) Between CDate([Forms]![frmRegBilling]![RegStart]) And CDate([Forms]![frmRegBilling]![RegStop]))
);
查询,当单独作为查询执行时(当 frmRegBilling 加载查询使用的参数时)显示正确的结果(8 条记录)。
但是在 VBA 中执行查询时,只显示 2 条记录。在这种情况下,仅验证第一个参数。
Dim qdf As DAO.QueryDef, rst As Recordset, varData As Variant
Dim intFields As Integer, intRecords As Integer, j As Integer, k As Integer
Dim rec As String, fld_type As Integer
Set qdf = CurrentDb.QueryDefs("Query1")
qdf.Parameters(0).Value = Eval(qdf.Parameters(0).Name)
qdf.Parameters(1).Value = Eval(qdf.Parameters(1).Name)
Set rst = qdf.OpenRecordset()
j = rst.RecordCount - 1
k = rst.Fields.Count - 1
切换行 Parameter(0) 或 (1) 没有帮助(如果由于任何原因受到影响)。在 VBA 中执行时,为什么两个参数都没有在查询中验证?
【问题讨论】:
-
VBA 代码运行时 frmRegBilling 是否打开?请edit你的问题解释为什么
Eval()语句是必要的。 -
frmRegBilling 已打开。 Eval() 语句是必需的,因为 OpenRecordet 不会取消引用查询中的条件。请参考。到stackoverflow.com/questions/20277231/…了解更多信息。
-
只是一个问题,但是您是否通过检查 j 的值来确定缺少预期记录?如果您不调用 rst.MoveLast,DAO 记录集很容易出现错误的记录计数。想知道是不是这样。除此之外,您是否尝试过通过取出 Eval 调用并将值硬编码来进行调试?也许这将使您对问题发生的位置有所了解。或者另一种方法,调用之前的 Debug.Print Eval(qdf.Parameters(x).Name) 也会有所帮助。
标签: vba ms-access ms-access-2010 dao