Mensaje de error de recursos del sistema excedido
Últimamente hemos visto un bombardeo de clientes que obtienen «Recursos del sistema excedidos» cuando migran a Windows 10, a pesar de que el sistema funcionó bien en versiones anteriores de Windows. En algunos casos, hemos rastreado el problema a las aplicaciones que usan muchos subformularios en un control de pestaña, por lo que voy a describir una técnica que evitará el problema en aquellos casos en que cada pestaña alberga un subformulario.
Crear pestañas para un magnífico UI – Hasta acabarse los recuerdos
El otro día estaba trabajando con la aplicación de un cliente que tenía tres niveles de pestaña: pestañas dentro de pestañas,de las cuales todas se cargaban con subformularios cada vez que se abría el formulario. La aplicación funcionó bien en Windows 7, pero causó mensajes de error «Se han excedido los recursos del sistema» en Windows 10. La solución es cargar solo el subformulario cuando el usuario hace clic en la pestaña y descargar el subformulario cuando hacen clic en otra pestaña.
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 End If 52 End Select End Sub
Revisión de código
La magia ocurre en el evento Cambiar de pestaña, que ocurre cuando el usuario hace clic en cada pestaña del control. En el ejemplo de código anterior, solo me interesan las pestañas que tienen subformularios, en este caso tres pestañas. (La técnica es inútil para pestañas sin subformularios).
El objeto estático LastSubForm, (línea 10), realiza un seguimiento del último subformulario utilizado y establece su valor de SourceObject en nulo en la línea 16. Esto vaciará de la memoria el formulario de la pestaña anterior manteniendo el uso de memoria al mínimo cuando el usuario se cambia a otra pestaña.
La instrucción select en la línea 22 se usa para identificar en qué pestaña se hizo clic, luego establece el objeto LastSubForm en el subformulario contenido en la pestaña y finalmente establece el SourceObject del subformulario en la línea 28. Hacerlo cargará inmediatamente el subformulario en la memoria. El proceso se repite para las otras dos pestañas del control con subformularios.
Tenga en cuenta
Para minimizar el uso de memoria, debe establecer la propiedad SourceObject de cada pestaña en una cadena vacía en la vista de diseño; de lo contrario, se cargarán todos los subformularios, lo que anula el propósito de la técnica.
La primera pestaña de su control debería cargarse, ya que es lo que verán sus usuarios cuando abran su formulario.
Simplemente agregue más declaraciones select según sea necesario si necesita usar esta técnica con más pestañas, particulamente la he usado para un control de pestañas que tenía 8 pestañas.
Si tiene pestañas anidadas, deberá repetir el enfoque para cada control de pestañas.
Si sus nombres de subformulario son los mismos que su propiedad SourceObject, puede optimizar aún más el código utilizando una variable de cadena en el código.
Buenos días
Exportando una tabla de access que tiene 368.785 registros hacia Excel se genera el error «Se excedieron los recursos» pero si lo hago con menos de 300.000 registros, los exporta y no da el error
En mi Pc tengo instalado Windows 7 Ultimate de 64 bits y Offices 2010.
Si abro la base de datos con Access 2007 o 2010 exporta completa la tabla de 368.785 registros pero luego, cuando regresa a la base de datos da el error «Se excedieron los recursos» tengo que cerrar la aplicación y volver a abrirla para poder seguir trabajando.
Generalmente se queda colgada ya que no libera los recursos y por tanto queda ocupado todo su espacio.
Por favor ¿Alguien me puede guiar para solucionar este problema?
Gracias de antemano