2014-10-08 50 views
0

我有一個簡單的訪問表單,有一個記錄集和一些複選框,這些複選框引用了用於記錄源的查詢中的某些字段。訪問刷新表單

還有一個命令按鈕,當按下該按鈕時,將具有相關複選框設置爲true的任何字段添加到查詢SQL。然後刪除現有查詢並使用新的SQL語句再次創建它。

這是所有預期的工作,但我似乎無法得到窗體來重新加載新的查詢。我已經嘗試了Me.Requery和Me.Refresh,但都沒有工作,我必須手動關閉窗體並重新打開它以顯示新的字段。

有沒有人有任何想法,我可以實現這一點,而不關閉窗體,然後重新打開?

感謝

________EDITED___________

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 
+0

請發佈您的命令按鈕的代碼。 – Smandoli 2014-10-08 16:39:27

+1

如果你想,你可以建立一個表單過濾器並更新它。我的代碼有:Me.FilterOn = True 然後隨時觸摸過濾器(即Me.Filter =「XYZ」),窗體將自動被重新查詢。 – 2014-10-08 16:56:35

+0

同意。我的感覺是有一個更簡單的方法。 – Smandoli 2014-10-08 17:12:56

回答

2

如果您正在編輯在飛行的SQL,爲什麼不直接分配給它的形式?

Me.RecordSource=strSQL_2 

(請注意,不需要重新查詢。更改記錄源形式導致accesss自動重新查詢)

那是我在過去的工作方法和它工作得很好。