sql >> Databáze >  >> RDS >> Access

Jak opravit „překročení systémových prostředků“ při migraci na Windows 10

Jak opravit „překročení systémových prostředků“ při migraci na Windows 10

Chybová zpráva o překročení systémových prostředků

V poslední době jsme byli svědky přívalu klientů, kteří dostali při migraci na Windows 10 „Překročení systémových zdrojů“, přestože systém v předchozích verzích Windows fungoval dobře. V některých případech jsme problém vysledovali u aplikací, které používají mnoho podformulářů v ovládacím prvku karty, takže popíšu techniku, která problému zabrání v případech, kdy každá karta hostí podformulář.

Uživatelské rozhraní pro skvělé karty – dokud nedojdou vzpomínky

Zrovna nedávno jsem pracoval s klientskou aplikací, která měla tři hloubka úrovní karet:karty v rámci karet, z nichž všechny byly načítány s podformuláři při každém otevření formuláře. Aplikace fungovala dobře v systému Windows 7, ale ve Windows 10 způsobovala chybové zprávy „System Resource Exceeded“. Řešením je načíst podformulář pouze tehdy, když uživatel klikne na kartu, a uvolnit podformulář, když přejde na jinou kartu.

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 Vybrat Case Me.TabTasks.Value
24 Case Me.Orders.PageIndex
25 If Me.frmOrders.SourceObject =vbNullString Then
26 Set LastSubform =Me.frmOrders
28 LastSubject.Source =“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 End If
52 End Select
End Sub

Kontrola kódu

Kouzlo se děje v události Change na kartě, ke které dochází, když uživatel klikne na každou kartu ovládacího prvku. Ve výše uvedené ukázce kódu mě zajímají pouze karty, které mají podformuláře, v tomto případě tři karty. (Tato technika je nepoužitelná pro karty bez podformulářů).

Statický objekt LastSubForm (řádek 10) sleduje naposledy použitý podformulář a nastavuje jeho hodnotu SourceObject na null na řádku 16. Tím se uvolní formulář předchozí karty z paměti a využití paměti se sníží na minimum, když se uživatel vypne. na jinou kartu.

Příkaz select na řádku 22 se používá k identifikaci, na kterou kartu bylo kliknuto, pak se objekt LastSubForm nastaví na podformulář obsažený na kartě a nakonec se nastaví SourceObject podformuláře na řádek 28. Tím se podformulář okamžitě načte do paměti. Zpracování se opakuje pro další dvě karty ovládacího prvku s podformuláři.

Mějte na paměti

Chcete-li minimalizovat využití paměti, musíte v zobrazení návrhu nastavit vlastnost SourceObject každé příslušné karty na prázdný řetězec, jinak se načtou všechny podformuláře, což maří účel této techniky.

První karta vašeho ovládacího prvku by se měla načíst, protože ji uvidí vaši uživatelé, když otevřou váš formulář.

Pokud potřebujete použít tuto techniku ​​s více kartami, přidejte podle potřeby další vybrané příkazy. Použil jsem ji pro ovládací prvek karta, který měl 8 karet.

Pokud máte vnořené karty, budete muset postup opakovat pro každý ovládací prvek karty.

Pokud jsou názvy vašich podformulářů stejné jako vaše vlastnost SourceObject, můžete dále optimalizovat kód pomocí řetězcové proměnné v kódu.

Pokud se vám tento příspěvek líbí, sdílejte ho!

Sdílejte prosím tento příspěvek na LinkedIn, Twitteru a Facebooku, velmi to oceníme!

Připojte se ke mně na další schůzce Access with SQL Server 8. května v 18:30 CST, pro více podrobností klikněte sem.


  1. 10 neobvyklých tipů pro Microsoft Access 2019

  2. Nejčastější dotazy k nalezení opravy použité v aplikacích Oracle

  3. Jak zkontrolovat verzi MySQL

  4. WSJDBCConnection nezalamuje objekty typu Oracle jdbc Connection