2016-05-13 97 views
0

我终于得到了交叉表报表来动态更新,但由于某些原因,日期参数未传递给报表或查询。访问交叉表查询数据参数不过滤查询

我有一个记录集更新交叉表报告和悬停/步骤通过VBA中的日期参数显示正确的日期,但报告仍显示所有数据。

该查询也显示所有日期的数据。这是我在查询中做错了什么吗?我已经尝试了每个选项,我可以在每个论坛看到什么,但无法获得解决方案。

这是查询

PARAMETERS [Forms]![frm_menu]![txtFromDate] DateTime, 
      [Forms]![frm_menu]![txtToDate] DateTime, 
      [Forms]![frm_menu]![cmbMplTag1] Text (255), 
      [Forms]![frm_menu]![cmbMplTag2] Text (255), 
      [Forms]![frm_menu]![cmbMplTag3] Text (255), 
      [Forms]![frm_menu]![cmbMplTag4] Text (255), 
      [Forms]![frm_menu]![cmbMplTag5] Text (255); 
TRANSFORM First(tbl_logdata.Input_Value) AS FirstOfInput_Value 
SELECT tbl_logdata.Log_Date, tbl_logdata.Log_Time 
FROM tbl_logdata 
WHERE (((tbl_logdata.Log_Date) Between [Forms]![frm_menu]![txtFromDate] 
            And [Forms]![frm_menu]![txtToDate]) 
    AND ((tbl_logdata.tag)=[Forms]![frm_menu]![cmbMplTag1])) 
    OR (((tbl_logdata.tag)=[Forms]![frm_menu]![cmbMplTag2])) 
    OR (((tbl_logdata.tag)=[Forms]![frm_menu]![cmbMplTag3])) 
    OR (((tbl_logdata.tag)=[Forms]![frm_menu]![cmbMplTag4])) 
    OR (((tbl_logdata.tag)=[Forms]![frm_menu]![cmbMplTag5])) 
GROUP BY tbl_logdata.Log_Date, tbl_logdata.Log_Time 
PIVOT tbl_logdata.tag; 

的SQL这是VBA的交叉分析报表。对于cmbMplTag#的参数做工精细:

Private Sub Report_Open(Cancel As Integer) 
Dim rst As dao.Recordset 
Dim db As dao.Database 
Dim qdf As dao.QueryDef 
Dim i As Integer 
Dim j As Integer 
Set db = CurrentDb 
Set qdf = db.QueryDefs("qry_MplTagsSummary") 

'on hover shows date from textbox' 
qdf.Parameters("Forms!frm_menu!txtFromDate") = [Forms]![frm_menu]![txtFromDate] 
'on hover shows date from textbox' 
qdf.Parameters("Forms!frm_menu!txtToDate") = [Forms]![frm_menu]![txtToDate] 
qdf.Parameters("[Forms]![frm_menu]![cmbMplTag1]") = [Forms]![frm_menu]![cmbMplTag1] 
qdf.Parameters("[Forms]![frm_menu]![cmbMplTag2]") = [Forms]![frm_menu]![cmbMplTag2] 
qdf.Parameters("[Forms]![frm_menu]![cmbMplTag3]") = [Forms]![frm_menu]![cmbMplTag3] 
qdf.Parameters("[Forms]![frm_menu]![cmbMplTag4]") = [Forms]![frm_menu]![cmbMplTag4] 
qdf.Parameters("[Forms]![frm_menu]![cmbMplTag5]") = [Forms]![frm_menu]![cmbMplTag5] 

Set rst = qdf.OpenRecordset() 
rst.MoveFirst 
j = -1 
i = 0 
For i = 0 To rst.Fields.Count - 1 

    j = j + 1 
    Select Case j 

     Case 0 
      Me.Log_Date.ControlSource = rst.Fields(i).Name 
     Case 1 
      Me.Log_Time.ControlSource = rst.Fields(i).Name 
     Case 2 
      Me.field1.ControlSource = rst.Fields(i).Name 
     Case 3 
      Me.field2.ControlSource = rst.Fields(i).Name 
     Case 4 
      Me.Field3.ControlSource = rst.Fields(i).Name 
     Case 5 
      Me.Field4.ControlSource = rst.Fields(i).Name 
     Case 6 
      Me.Field5.ControlSource = rst.Fields(i).Name 

    End Select 
skip_it: 
Next i 

rst.Close 
Set rst = Nothing 
End Sub 

请让我知道如果我没有足够的提供细节/信息

回答

0

检查SQL WHERE子句条件逻辑。由于是,逻辑过滤器是(不是两个)阵营记录:

  1. 日期范围下降查询的标签仅相当于形式的标记1
  2. 查询的标签等于任何形式的标签2的 - tag5。

可能你打算分开日期范围和标签。因此,使用AND运算符将每个条件的括号括起来,甚至可以使用IN子句。请参阅下面的缩进说明:

... 
WHERE (
     (
      (tbl_logdata.Log_Date) Between [Forms]![frm_menu]![txtFromDate] 
            And [Forms]![frm_menu]![txtToDate] 
     ) 
    AND (
      (tbl_logdata.tag) IN (
           [Forms]![frm_menu]![cmbMplTag1], 
           [Forms]![frm_menu]![cmbMplTag2], 
           [Forms]![frm_menu]![cmbMplTag3], 
           [Forms]![frm_menu]![cmbMplTag4], 
           [Forms]![frm_menu]![cmbMplTag5] 
           ) 
     ) 
    ) 
GROUP BY tbl_logdata.Log_Date, tbl_logdata.Log_Time 
+0

太棒了,感谢您的帮助。完美工作 –

+0

好奇,最终成为问题的是什么?我看到你接受了上面的答案。是日期格式吗? – Parfait

+0

对不起,我接受了错误的一个。这是解决问题的括号 –

0

您可能需要转换成真正的日期值。并使用属性:

qdf.Parameters("Forms!frm_menu!txtFromDate").Value = DateValue([Forms]![frm_menu]![txtFromDate]) 
qdf.Parameters("Forms!frm_menu!txtToDate").Value = DateValue([Forms]![frm_menu]![txtToDate])