2017-04-19 3 views
0

Ich habe ein Formular, das ein Unterformular enthält, das eine Datenblattansicht einer Abfrage anzeigt. Es gibt eine Schaltfläche im Hauptformular, die beim Anklicken die SQL der Abfrage überarbeitet. Wenn auf die Schaltfläche geklickt wird, wird die Abfrage wie erwartet geändert, aber die Ergebnisse werden im Unterformular nur dann aktualisiert, wenn ich das Hauptformular schließe und erneut öffne.Formular nicht aktualisiert, wenn Abfrage Def aktualisiert

Ich habe versucht, das Unterformular und das Hauptformular erneut abzufragen. Ich habe versucht, das Unterformular und das Hauptformular zu aktualisieren. Ich habe verschiedene Kombinationen der beiden ausprobiert, aber nichts wird die im Unterformular angezeigten Daten aktualisieren, außer das Hauptformular zu schließen und wieder zu öffnen.

Irgendwelche Einsichten oder Vorschläge?

Dies ist der Code, den ich im Hauptformular habe, und es wird ausgeführt, wenn auf eine Schaltfläche geklickt wird.

Dim f as Form 
    Set f = Me.frm_Subform.Form 

    ' Update the query def 
    Dim sSQL As String 
    Dim sqlArray As Variant 
    sSQL = CurrentDb.QueryDefs("myQuery").SQL 
    sqlArray = Split(sSQL, "ORDER BY") 
    sSQL = Left(sqlArray(0), Len(sqlArray(0)) - 3) 
    sSQL = sSQL & " AND (STAFF.FULLNAME <> 'JOHN DOE') " 
    sSQL = sSQL & "ORDER BY" & sqlArray(1) 
    CurrentDb.QueryDefs("myQuery").SQL = sSQL 

    ' Refresh the subform 
    F.Requery 
    Me.Requery 
    F.Refresh 
    Me.Refresh 
    F.Repaint 
    Me.Repaint 
+0

Immer noch neugierig, wenn jemand weiß, warum die Änderung der Abfrage und das Aktualisieren/erneutes Abfragen die Daten im Unterformular nicht aktualisieren. – shoegazer100

Antwort

1

Warum Abfrage ändern? Nur um die Sortierreihenfolge zu ändern? Bauen Sie ein Formularsatz für Blattansicht und gelten Sortierkriterien auf die Eigenschaft SortiertNach mit DoCmd.SetOrderBy oder

Me.OrderByOn = False  
Me.OrderBy = "your criteria" 
Me.OrderByOn = True 

Und wenn Sie wollen, um dynamisch Filterkriterien anwenden, verwenden Sie Code ähnlich dem SortiertNach.

+0

Danke für die Antwort, aber ich ändere nicht nur die Sortierreihenfolge. STAFF.FULLNAME <> 'JOHN DOE' wird der Abfrage hinzugefügt, wobei der tatsächliche Name von dem abhängt, was der Benutzer ausgewählt hat. Es gibt bestimmte Namen, die aufgrund von Benutzereingaben aus der Abfrage ausgeschlossen werden müssen. – shoegazer100

+0

Siehe überarbeitete Antwort. – June7

+0

Danke, dass Sie mich in die richtige Richtung weisen. Letztendlich habe ich die Filtereigenschaft verwendet, weil ich eigentlich keine Umordnung benötige: 'F.Filter = "STAFF.FULLNAME <>' JOHN DOE 'F.FilterOn = True' – shoegazer100

Verwandte Themen