Buscar..


Introducción

Cuando recibe un error: "Microsoft Access ha encontrado un problema y necesita cerrarse", a menudo no hay mucha información que lo ayude a identificar la causa del error. A continuación hay una serie de pasos que puede seguir para solucionar la causa de los errores.

Observaciones

Asegúrese de eliminar otras variables de la ecuación mientras prueba

Corrupción de la red

No cargue el cliente fuera de una red. Ponlo en el disco local y ejecútalo desde allí.

Construcciones corporativas

Si se encuentra en un entorno corporativo que utiliza "compilaciones de computadora" y no ha tenido éxito con la Descompilación, la Memoria de Pruebas ni la eliminación de datos Binarios, entonces rechace hacer más pruebas hasta que el equipo de TI pueda proporcionar al usuario una máquina de prueba que tenga solo Windows, Office y Service Packs instalados.

Todo el software y las actualizaciones deben instalarse a mano sin utilizar instalaciones desatendidas. No instale antivirus en esta máquina para realizar pruebas.

Comprenda que muchos departamentos de TI simplemente intentan hacer un enfoque de talla única para todas las compilaciones, y todas las compilaciones se basan en la otra. Con el tiempo, los conflictos de software pueden hacer que el acceso se bloquee o actúe de forma directa.

Mala potencia

Como se mencionó en el ejemplo de memoria, las fluctuaciones de energía pueden causar errores en la computadora. Si la base de datos está en un edificio industrial, intente obtener un acondicionador de energía o un UPS que proporcione energía limpia (sin batería, no con el varistor de óxido metálico)

Además, verifique el cable de la fuente de alimentación que está enchufado a la barra de alimentación o al tomacorriente. Asegúrese de que las especificaciones del medidor y el voltaje sean suficientes. Los departamentos de TI a menudo dejan los cables de alimentación enchufados en la estación y simplemente retiran la máquina. Después de muchos años, están utilizando fuentes de alimentación más robustas, pero no han cambiado el cable. Hace una diferencia En caso de duda, traiga un cable nuevo, más grueso.

Descompilar la base de datos

Esta siempre debe ser su solución inicial. Una buena política es descompilar la base de datos antes de cada lanzamiento.

  1. Crea un atajo de descompilación . Esto carga la base de datos con un modificador "/ decompile".

    1. Haga clic derecho en su archivo de base de datos. Seleccione Copiar
    2. Haga clic derecho en la ventana del explorador y seleccione "Pegar acceso directo"
    3. Haga clic derecho en el acceso directo y seleccione "Propiedades"
    4. En el cuadro Destino, vaya al final de la línea y agregue /decompile
    5. Haga clic en Aceptar para cerrar el acceso directo
  2. Abrir base de datos con Shift.
    Mantenga presionada la tecla Mayús mientras hace doble clic en este acceso directo. Esto evita que las ejecuciones automáticas se ejecuten dentro de la base de datos. Debes ir directamente a la ventana de navegación.

  3. Compactar y reparar la base de datos. Una vez que la base de datos esté cargada, deberá hacer clic en el botón Compactar y Reparar.

    1. Localice el botón Compactar y reparar base de datos en la barra de herramientas .
    2. Mantenga presionada la tecla Shift. Manténgalo presionado mientras hace clic en el botón Compactar y Reparar .
  4. Recompila la base de datos

    1. Ir a la ventana de VBA (Control + G)
    2. Seleccione Depurar -> Compilar desde el menú

Este es el proceso completo de descompilación. En general, debería corregir el 99% de todos los bloqueos de acceso o el comportamiento extraño de la forma.

Prueba de memoria de computadora

Si sus choques son aleatorios o esporádicos, siga este paso. Si sus bloqueos ocurren cada vez que ejecuta la base de datos, este paso no solucionará el problema (aunque la mala memoria puede ser la razón por la que ocurrió el daño en primer lugar).

Use un comprobador de memoria que se inicie fuera del sistema operativo y ejecute varios pases. Dos opciones populares son MemTest86 (comercial) y MemTest86 + (código abierto)

Comience la prueba y déjela correr durante las horas de trabajo. La razón de esto es que otros factores en el edificio, como el ruido en los circuitos de alimentación, pueden causar errores de memoria, por lo que debe intentar mantener las variables iguales.

Si tiene errores de memoria, deberá identificar si se debe a una mala memoria en la computadora o algún otro factor. Sin embargo, esto está fuera del alcance de este documento.

Eliminar datos binarios del formulario

A veces, los bloqueos ocurren constantemente en un solo formulario o informe, o ocurren solo al imprimir. Es posible que los datos binarios dentro del formulario / informe se hayan dañado.

Guardar el objeto formulario / informe como texto Hay dos funciones no documentadas. Application.SaveAsText y Application.LoadFromText. Puede usar estas funciones para exportar las definiciones de formulario / informe, limpiar la definición y luego importarla de nuevo.

  1. Haga una copia de seguridad de su base de datos antes de continuar
  2. Ir a la ventana inmediata de VBA (Control + G)
  3. Escriba Application.SaveAsText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt" (Reemplace MyForm con el nombre del formulario / informe. Use acReport si se trata de un informe corrupto)
  4. Cambie el nombre del elemento del formulario original (por ejemplo, cambie el nombre a MyForm.Bak) dentro de la ventana de la base de datos

Limpie el archivo de definiciones de formulario / informe

  1. Abra el archivo exportado (por ejemplo, MyForm.txt) en el bloc de notas

  2. Elimine la línea "Checksum =" (debe estar en la línea 3)

  3. Borrar datos binarios

    1. Identificar los bloques de datos binarios. Examine el archivo y verá líneas que comienzan con "Parámetro = Comenzar". Siguiendo esas líneas tendrás líneas de datos binarios codificados. Finalmente, el bloque binario terminará con una línea que consiste solo en "Fin". El bloque de datos binarios incluye la primera línea (con la instrucción Begin) y todas las líneas hasta e incluyendo la última línea (con la instrucción End).

      Nota: todos estos bloques deben aparecer ANTES de las definiciones de control de formulario

    2. Eliminar los bloques de datos binarios para los siguientes parámetros:

      • Mapa de nombres
      • PrtMip
      • PrtDevMode
      • PrtDevNames
      • PrtDevModeW
      • PrtDevNamesW
  4. Busque otras cuestiones. Mientras tenga el archivo abierto, desplácese por el resto del archivo y busque cualquier cosa que le llame la atención, especialmente en el código del módulo VBA en la parte inferior. Buscará cualquier cosa que sobresalga del resto y puede ser corrupción.

  5. Guarda el archivo.

Cargue el formulario / informe de nuevo en Access y Test

  1. Vuelva a cargar el formulario en Access.
    • En Access, vaya a la ventana inmediata (Control + G)
    • Escriba Application.LoadFromText acForm, "MyForm", CurrentProject.Path & "\MyForm.txt"
    • Decompile / Compact Repair / Recompile (Vea el otro ejemplo en la documentación)
    • Abra el formulario / informe para probar. Esperemos que todo esté funcionando ahora.
    • Eliminar la forma corrupta antigua (por ejemplo, MyForm.bak)

Prevenir esta corrupción en el futuro.

La causa más común de datos binarios corruptos dentro de un informe / formulario es cuando varias computadoras / usuarios usan el mismo archivo de cliente de base de datos en lugar de tener su propia copia separada. Por esta razón, cada usuario debe tener su propio archivo de cliente en su escritorio que ejecutan.

Eliminar campos "Objeto OLE"

Si tiene imágenes u otros datos almacenados en Access como objetos OLE, debería encontrar un mejor enfoque. Cuando se almacenan los datos OLE, se almacenan de acuerdo con el software (y la versión del software) en la computadora que los almacena. Cuando otra computadora va a mostrar los datos del Objeto OLE en el formulario, pero no tiene instalada la versión / software exacto, muy a menudo esto resulta en un bloqueo de la aplicación.

Si está almacenando datos de imágenes, entonces un mejor enfoque es almacenar el nombre del archivo y, en su lugar, guardar las imágenes en una ubicación estándar. Las versiones más nuevas de acceso tienen los controles nativos para que esto sea el camino a seguir.

Reconstruir la base de datos completa

Esto es mucho trabajo, así que hazlo como último recurso después de agotar todas las demás opciones. Solo necesita hacer esto si el problema está ocurriendo para diferentes usuarios, en diferentes máquinas. Si no ocurre para todos los usuarios, lo más probable es que no sea un contenedor de base de datos corrupto.

Al igual que los pasos para eliminar datos binarios, va a reconstruir su base de datos desde cero. Este proceso es un poco ritualista, pero si se hace meticulosamente con cuidado para no "preservar" cualquier posible corrupción, el proceso es altamente efectivo.

Crear un nuevo contenedor de base de datos de acceso.

  • En Access, en la pestaña Archivo, puede seleccionar "Nuevo". Crear una nueva base de datos vacía en formato ACCDB.

Mueve todos los objetos al nuevo contenedor

No utilice las funciones de importación / exportación dentro de Access para mover los objetos, y no basta con hacer clic y arrastrar. Hacer esto puede copiar los elementos corruptos al nuevo contenedor.

Mesas:

  • Para cada tabla en el contenedor de acceso anterior, cree una tabla nueva en el contenedor nuevo.
  • Desde la vista de diseño, copie / pegue las definiciones de campo.
  • Compruebe las propiedades de la tabla para asegurarse de que coinciden en ambas bases de datos
  • Mueva también las macros de datos (vea la sección de macros para saber cómo hacerlo)
  • Para mover los datos, exporte los datos antiguos a XML o CSV, y luego importe desde ese formato.

Consultas:

  • Cargue cada consulta en la vista SQL.
  • Copiar / Pegar el texto SQL.
  • Pegar en la nueva base de datos.
  • Compare las propiedades de consulta para asegurarse de que coinciden.

Formularios / Informes:

  • Para cada formulario / informe, use la función Application.SaveAsText para exportar los formularios / informes a un archivo de texto.
  • Elimine los datos binarios (consulte Eliminar datos binarios de la documentación del formulario para familiarizarse con este proceso)
  • Utilice la función Application.LoadFromText para volver a importar los objetos a la nueva base de datos

Macros

Tienes tres métodos para mover las macros.

  1. Recrear cada macro a mano en el nuevo contenedor de la base de datos.
  2. Utilice el método Application.SaveAsText / Application.LoadFromText con el parámetro acMacro .
  3. Copiar / Pegar definiciones de macro para cada macro
    • Seleccione Todos (Control + A) para seleccionar todos los elementos de macro. Luego Copiar (Control + C).
    • Abra un documento de Bloc de notas en blanco y pegue (Control + V) la macro XML.
    • Cree una nueva macro en blanco en el nuevo contenedor de la base de datos.
    • En el Bloc de notas, seleccione Todo el texto (Control + A). Luego Copiar (Control + C)
    • En la macro en blanco, Pegar (Control + V). La macro debería aparecer. Guardalo

Módulos

  • Para cada módulo, seleccione todo el código (Control + A) y pegue (Control + V) en el nuevo contenedor de la base de datos.
  • Asegúrese de verificar las propiedades de la base de datos (en la ventana de VBA, vaya a Herramientas -> Propiedades del cliente)

Macros de datos

Para cada macro de datos, use los métodos SaveAsText / LoadFromText.

  1. Ir a la ventana inmediata de VBA (Control + G)
  2. Escriba Application.SaveAsText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt" (Reemplace MyTableName con el nombre de la tabla que contiene las macros de datos)
  3. Revise el archivo en busca de signos de corrupción
  4. En el nuevo contenedor de la base de datos, cargue la definición usando Application.LoadFromText acTableDataMacro, "MyTableName", CurrentProject.Path & "\MyTableName.txt"

Como se mencionó anteriormente, este es un montón de trabajo, pero tiene resultados. Este método también debe utilizarse al migrar una base de datos de Access 97 a 2000, o una base de datos de Access 2000 a 2003.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow