Access
 sql >> Datenbank >  >> RDS >> Access

So beheben Sie „Überschreitung der Systemressourcen“ bei der Migration zu Windows 10

So beheben Sie „Überschreitung der Systemressourcen“ bei der Migration zu Windows 10

Fehlermeldung „Systemressource überschritten“

In letzter Zeit haben wir eine Flut von Clients gesehen, die bei der Migration zu Windows 10 „Systemressourcen überschritten“ erhalten, obwohl das System in früheren Versionen von Windows einwandfrei funktioniert hat. In einigen Fällen haben wir das Problem auf Apps zurückgeführt, die viele Unterformulare in einem Registerkartensteuerelement verwenden, daher werde ich eine Technik beschreiben, die das Problem in den Fällen verhindert, in denen jede Registerkarte ein Unterformular hostet.

Tabs sorgen für eine großartige Benutzeroberfläche – bis die Erinnerungen ausgehen

Erst neulich habe ich mit der App eines Kunden gearbeitet, die drei war Tab-Ebenen tief:Tabs innerhalb von Tabs, die bei jedem Öffnen des Formulars mit Unterformularen geladen wurden. Die App funktionierte unter Windows 7 einwandfrei, verursachte jedoch unter Windows 10 die Fehlermeldung „System Resource Exceeded“. Die Lösung besteht darin, das Unterformular nur zu laden, wenn der Benutzer auf die Registerkarte klickt, und das Unterformular zu entladen, wenn er auf eine andere Registerkarte klickt.

Private Sub TabTasks_Change()
10 Static LastSubform As Access.SubForm

12 If Not LastSubform Is Nothing Then
14 If Len(LastSubform.SourceObject) Then
16 LastSubform.SourceObject =vbNullString
18 End If
20 End If
22 Select Case Me.TabTasks.Value
24 Case Me.Orders.PageIndex
25 If Me.frmOrders.SourceObject =vbNullString Then
26 Set LastSubform =Me.frmOrders
28 LastSubform.SourceObject =„frmOrder_sub“
30 End If
32 Case Me.Invoices.PageIndex
34 If Me.frmInvoices.SourceObject =vbNullString Then
36 Set LastSubform =Me.frmInvoices
> 38 LastSubform.SourceObject =„frmInvoices_sub“
40 End If
42 Case Me.Payments.PageIndex
44 If Me.frmPayments.SourceObject =vbNullString Then
46 Set LastSubform =Me .frmPayments
48 LastSubform.SourceObject =„frmPayments_sub“
50 Beenden, wenn
52 Beenden Select
End Sub

Codeüberprüfung

Die Magie geschieht beim Change-Ereignis der Registerkarte, das auftritt, wenn der Benutzer auf jede Registerkarte des Steuerelements klickt. Im obigen Codebeispiel interessieren mich nur Registerkarten mit Unterformularen, in diesem Fall drei Registerkarten. (Die Technik ist nutzlos für Registerkarten ohne Unterformulare).

Das statische LastSubForm-Objekt (Zeile 10) verfolgt das zuletzt verwendete Unterformular und setzt seinen SourceObject-Wert in Zeile 16 auf null. Dadurch wird das Formular des vorherigen Tabs aus dem Speicher gelöscht und die Speichernutzung auf einem Minimum gehalten, wenn der Benutzer abschaltet zu einem anderen Tab.

Die select-Anweisung in Zeile 22 wird verwendet, um zu identifizieren, auf welchen Tab geklickt wurde, dann das LastSubForm-Objekt auf das in dem Tab enthaltene Unterformular zu setzen und schließlich das SourceObject des Unterformulars in Zeile 28 zu setzen. Dadurch wird das Unterformular sofort in den Speicher geladen. Die Verarbeitung wird für die anderen beiden Registerkarten des Steuerelements mit Unterformularen wiederholt.

Denken Sie daran

Um den Speicherverbrauch zu minimieren, müssen Sie die SourceObject-Eigenschaft jeder betreffenden Registerkarte in der Entwurfsansicht auf eine leere Zeichenfolge setzen, da sonst alle Unterformulare geladen werden, was den Zweck dieser Technik zunichte macht.

Die erste Registerkarte Ihres Steuerelements sollte geladen werden, da sie Ihren Benutzern angezeigt wird, wenn sie Ihr Formular öffnen.

Fügen Sie einfach nach Bedarf weitere Select-Anweisungen hinzu, wenn Sie diese Technik mit mehr Tabs verwenden müssen. Ich habe sie für ein Tab-Steuerelement mit 8 Tabs verwendet.

Wenn Sie verschachtelte Tabs haben, müssen Sie den Ansatz für jedes Tab-Steuerelement wiederholen.

Wenn Ihre Unterformularnamen mit Ihrer SourceObject-Eigenschaft identisch sind, können Sie den Code weiter optimieren, indem Sie eine Zeichenfolgenvariable im Code verwenden.

Wenn dir dieser Beitrag gefällt, teile ihn!

Bitte teilen Sie diesen Beitrag auf LinkedIn, Twitter und Facebook, es wird sehr geschätzt!

Nehmen Sie am nächsten Access with SQL Server-Meeting am 8. Mai um 18:30 Uhr CST teil. Für weitere Informationen klicken Sie bitte hier.