Sql 访问刷新表单

Sql 访问刷新表单,sql,forms,ms-access,vba,refresh,Sql,Forms,Ms Access,Vba,Refresh,我有一个简单的访问表单,其中包含一个记录集和一些复选框,这些复选框引用了用于记录源的查询中的某些字段 还有一个命令按钮,按下该按钮时,会将关联复选框设置为true的任何字段添加到查询SQL中。然后,它删除现有查询,并使用新的SQL语句再次创建它 这一切都按预期进行,但是我似乎无法让表单重新加载新查询。我尝试了Me.Requery和Me.Refresh,但都不起作用,我必须手动关闭表单并重新打开它,以显示新字段 有人知道我如何在不关闭表单然后重新打开的情况下实现这一点吗 谢谢 ________编辑

我有一个简单的访问表单,其中包含一个记录集和一些复选框,这些复选框引用了用于记录源的查询中的某些字段

还有一个命令按钮,按下该按钮时,会将关联复选框设置为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

如果您正在动态编辑SQL,为什么不直接将其分配给表单呢

Me.RecordSource=strSQL_2
(请注意,不需要重新查询。更改窗体记录源会导致Access自动重新查询)


这是我过去使用过的一种方法,效果很好。

请发布命令按钮的代码。如果愿意,您可以构建一个表单过滤器并进行更新。我的代码为:Me.FilterOn=True,则每当我触摸过滤器(即Me.filter=“XYZ”)时,就会自动重新查询表单。同意。我的感觉是有一种更简单的方法。@Smandoli见上图edit@WayneG.Dunn请参见上面的编辑