Pregunta

Estoy usando Access 2003 en un duo-core de la máquina con 4 gb de RAM, con Windows XP (Service Pack 3) [5.1.2600]

Periódicamente, me sale un mensaje de error "no Hay suficiente memoria para realizar esta operación.Cerrar programas innecesarios y vuelva a intentar la operación."

Una verificación de que el Administrador de Tareas indica que hay un montón de memoria libre.Cierre otros programas abiertos no hace ninguna diferencia.

Esto ocurre de forma esporádica, y bajo diferentes circunstancias:a veces, mientras que el ahorro en el diseño del Formulario o código de VBA cambios, a veces, cuando varias Formas abiertas y en uso.

Si intenta guardar los cambios de diseño, y se produce este error, el Acceso a los objetos están dañados y no pueden ser recuperados.

Cualquier sugerencias sobre lo que podría estar causando esto sería muy bienvenida.

MTIA

¿Fue útil?

Solución 6

Como sé que es cualquiera de los formularios o informes que muy probablemente se dañan, he creado un nuevo MDB, y sólo las tablas importadas (que se adjunta), consultas, secuencias de comandos (sólo una), módulos y menús. Luego utiliza LoadFromText a importar formularios e informes a través de una función, y luego hice lo habitual descompilar / compilación y / reparación compacta, etc.

Hasta ahora, toco madera, no he tenido otro accidente en algunos días, así que probablemente se pegan con este método de recuperación.

Muchas gracias a todos por sus sugerencias.

Otros consejos

El proyecto de VBA en su extremo delantero está probablemente dañado. Es necesario reconstruir desde cero y luego utilizar el acceso adecuado prácticas de codificación:

  1. en las opciones VBE, apague compilar en la demanda (véase el artículo Michael Kaplan en DESCOMPILAR para más detalles de por qué).

  2. en las opciones VBE, encender Requerir declaración de variables.

  3. en el VBE, personalizar la barra de herramientas para que el botón Compile es fácilmente accesible (está en el menú Depurar). También se recomienda añadir el botón Pila de llamadas (en el menú Ver), ya que es muy útil para la depuración de errores en modo de interrupción. El punto aquí es hacer que la depuración y compilación de lo más fácil posible.

  4. haber configurado su entorno, ir a través de todos los módulos en su proyecto y añadir la opción recién recuperado explícita a la parte superior de cada módulo que carece de ella. A continuación, compile. Vas a encontrar rápidamente dónde tiene código no válido y tendrá que solucionarlo.

  5. a partir de ahora, al programar, compilar con frecuencia, después de cada dos o tres líneas de código. Probablemente compilar mi proyecto de 100 o más veces al día en la codificación.

  6. descompilar periódicamente su proyecto y compacto y recompilar. Esto limpiará cualquier porquería que se acumula durante el desarrollo regular.

Estas prácticas aseguran que el código en un proyecto estancias no corruptos en una condición como más limpio posible. No hará nada para recuperar un proyecto ya dañado.

En lo que respecta a cómo reconstruir el proyecto, creo que me gustaría ir la ruta drástica de exportar todos los objetos con Application.SaveAsText e importarlos en una nueva base de datos en blanco con Application.LoadFromText. Esto es superior a la simple importación de su extremo delantero dañado existente debido a la importación puede importar estructuras corruptas que no sobrevivirán un ciclo SaveAsText / LoadFromText.

programa diario de acceso, trabajar con aplicaciones no triviales que el uso de una gran cantidad de código, incluyendo un montón de módulos de clase independiente. No he perdido un objeto a la corrupción código en más de 5 años, y que estaba de vuelta en el día, cuando yo todavía estaba usando A97.

De haber disparado a través de este viejo post mío, y viendo que tenía un poco justo de interés, pensé que tal vez una actualización sería el fin?

Por lo que 2 años abajo de la pista, haciendo un montón de 2007 app de trabajo así como los mayores de 2003 (e incluso '97) apps, me estoy encontrando que el 2007 es el menos propenso a realmente desagradables accidentes de 2003 - donde el Acceso de las definiciones de objetos (formularios e informes esp.) podría ser fácilmente dañados.

Todavía me siga las sugerencias 1-6 (arriba) por David-W-Fenton religiosamente a pesar de que, además de el uso de la Aplicación.SaveAsText (ver Tony Toews la sugerencia y el enlace de arriba).

En estos días, si es del 97, 2003 o 2007 en el que estoy trabajando, si el Acceso se da cualquier sugerencia de "ser raro | estrellarse | tirar inexplicables errores"etc, hago lo siguiente:

  1. Cerrar inmediatamente el Acceso de la aplicación
  2. Copia de seguridad de la mdb/archivo accdb
  3. Re-abrir la aplicación mientras mantiene pulsada la tecla [Shift] de modo que nada se ejecuta
  4. Exportar todos los objetos de texto usando la Aplicación.SaveAsText (como otra copia de seguridad)
  5. Cierre y vuelva a abrir la aplicación usando el modificador /descompilar
  6. Vuelva a compilar el código VBA
  7. Hacer un pacto/Reparación.

Esto no resuelve todo, pero sí reducir significativamente el número de las corrupciones de objetos de Acceso a partir de lo que soy capaz de observar.

Oh mi.

He trabajado en una tienda por muchos años que se utiliza el Acceso como su plataforma de elección.La aplicación llegó tan grande que empezó a golpear a una memoria interna, la limitación de Acceso de 2003.Se comenzó a experimentar el mismo problema que usted está teniendo.Como habrán notado, no hay ninguna indicación externa de los problemas de memoria cuando esto sucede.

La compañía habló largamente con Microsoft sobre el problema, y creo que Microsoft finalmente se suministra con un parche.Así que es posible que desee hablar a Microsoft acerca de esto, si suena como una situación similar a lo que están experimentando, ya que puede ser capaz de proporcionarle con el mismo parche.

En última instancia, la solución a largo plazo es la de romper con la aplicación en partes más pequeñas.Mover a Access 2007 no ayuda;de hecho, es hecho cosas peores, ya que el Acceso de 2007, tiene más piezas móviles.

solución rápida; garantiza que funcione:

Open VBA (Alt-F11) En la ventana inmediata entre lo siguiente:

Application.SaveAsText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive"

entonces

Application.LoadFromText acForm, "corrupt form name here", CurrentProject.Path & "\zzTempRevive"

Eso es todo :) Espero que esto ayude a los demás!

Este es también el mensaje de error predeterminado cuando Access no tiene idea de cuál es el problema en realidad es. Ahora bien, si el MDB es particularmente grande, digamos más de 800 formularios e informes con módulos de entonces, sí el MDB podría ser demasiado grande a pesar de que le dio un mensaje cuando se fue a crear MDEs. ACC2000: "Microsoft Access no pudo crear una base de datos MDE" mensaje de error

he tenido que esto ocurra de vez en cuando a mí mismo. Y mis BMD actuales no son tan grandes. Tenga en cuenta que compacta y reparación no detecta errores en objetos que no sean tablas, índices o relaciones. Así importar en otra MDB es la única manera de corregir estos errores.

¿Estás trabajando en este MDB través de la red? Eso es lo único que se me ocurre que podrían causar este problema.

he encontrado con este problema muchas veces y finalmente encontró una solución que funcionó. No sé cuál es la causa del problema, pero sí sé cómo solucionarlo.

Por lo general, el error se produce al abrir un formulario. Lo que hay que hacer es completamente re-crear esa forma. La forma más sencilla de hacerlo es a primera exportación la forma de un archivo de texto con la función Application.SaveAsText indocumentado. A continuación, se elimina la forma de su base de datos y volver a la carga con Application.LoadFromText.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top