【发布时间】:2014-12-03 08:03:35
【问题描述】:
我有一个简单的访问表单,其中包含一个记录集和一些复选框,这些复选框引用了用于记录源的查询中的某些字段。
还有一个命令按钮,当按下该按钮时,会将关联复选框设置为 true 的任何字段添加到查询 SQL。然后它会删除现有查询并使用新的 SQL 语句再次创建它。
这一切都按预期工作,但是我似乎无法让表单重新加载新查询。我已经尝试过 Me.Requery 和 Me.Refresh 但都不起作用,我必须手动关闭表单并重新打开它才能显示新字段。
有没有人知道如何在不关闭表单然后重新打开的情况下实现这一点?
谢谢
________已编辑___________
Private Sub Command28_Click()
On Error Resume Next
Dim strSQL As String
Dim strSQL_2 As String
Dim qdf As DAO.QueryDef
Const conQUERY_NAME As String = "qry_pick_search"
For Each ctl In Me.Controls
If ctl.ControlType = acCheckBox Then
If ctl.Value Then
strSQL = strSQL & "Picks." & ctl.Tag & ", "
End If
End If
Next
CurrentDb.QueryDefs.Delete conQUERY_NAME
On Error GoTo Err_Command28_Click
strSQL_2 = "SELECT Picks.Type, " & strSQL & " Picks.part, Count(Picks.ID) AS CountOfID FROM Picks GROUP BY Picks.Type, " & strSQL & " Picks.part HAVING (((Picks.Type) = [Forms]![frm_picks]![select_type]) And ((Picks.part) = [Forms]![frm_picks]![select_part])) Or ((([Forms]![frm_picks]![select_part]) Is Null) And (([Forms]![frm_picks]![select_type]) Is Null)) Or (((Picks.Type) = [Forms]![frm_picks]![select_type]) And (([Forms]![frm_picks]![select_part]) Is Null)) Or (((Picks.part) = [Forms]![frm_picks]![select_part]) And (([Forms]![frm_picks]![select_type]) Is Null)) ORDER BY Picks.Type, Picks.part;"
Set qdf = CurrentDb.CreateQueryDef(conQUERY_NAME, strSQL_2)
Form.Requery
Exit_Command28_Click:
Exit Sub
Err_Command28_Click:
MsgBox Err.Description, vbExclamation, "Error in Command28_Click()"
Resume Exit_Command28_Click
End Sub
【问题讨论】:
-
请发布命令按钮的代码。
-
如果您愿意,您可以构建一个表单过滤器并对其进行更新。我的代码有: Me.FilterOn = True 然后,只要我触摸过滤器(即 Me.Filter = "XYZ"),就会自动重新查询表单。
-
同意。我的感觉是有一种更简单的方法。
-
@Smandoli 见上面的编辑
-
@WayneG.Dunn 见上面的编辑
标签: sql forms ms-access vba refresh