
La última solución alternativa para el error "Query is corrupt" introducido con CVE-2019-1402
La solución alternativa más reciente para el error La consulta está dañada introducido con CVE-2019-1402 en MS Access.
Existen otras soluciones alternativas que deben aplicarse a nivel administrativo, por ejemplo, desinstalando la actualización errónea. En contraste con ellas, la intención de la que se proporciona aquí es funcionar alterando automáticamente el contenido del propio MDB/ACCDB con el menor trabajo posible.
Microsoft publicó una corrección para este problema el 2019-12-10 (día de parches) que, de manera predeterminada, se instalará automáticamente a través de WSUS, etc.
Por lo tanto, esta solución alternativa debería quedar obsoleta después de que se aplique la corrección, y cualquiera que la haya utilizado puede llamar a la función RemoveWorkaroundForCorruptedQueryIssue() para restaurar el estado original de la aplicación.
Asegúrese de que esté habilitada la referencia Microsoft DAO 3.6 Object Library (compatibilidad hacia atrás) o Microsoft Office x.x Access Database Engine Object Library en VBA Editor -> Tools -> References (consulte #1 para más detalles).
Utilice el módulo basWorkaround.bas para implementar automáticamente la solución alternativa sugerida por Microsoft (usar una consulta en lugar de una tabla). Como precaución, haga una copia de seguridad de su base de datos primero.
Llame a AddWorkaroundForCorruptedQueryIssue() para aplicar la solución alternativa y a RemoveWorkaroundForCorruptedQueryIssue() para eliminarla en cualquier momento.
AddWorkaroundForCorruptedQueryIssue() agregará el sufijo _Table a todas las tablas que no sean del sistema, por ejemplo, la tabla IceCreams se renombraría a IceCreams_Table.
También creará una nueva consulta con el nombre original de la tabla, que seleccionará todas las columnas de la tabla renombrada. En nuestro ejemplo, la consulta se llamaría IceCreams y ejecutaría el SQL select * from [IceCreams_Table].
RemoveWorkaroundForCorruptedQueryIssue() realiza las acciones inversas.
Estoy usando esta solución alternativa en proyectos grandes con más de 400 tablas de todo tipo, incluidas tablas externas que no son MDB (como SQL Server).
En mi caso, necesité renombrar manualmente USysRibbons_Table de vuelta a USysRibbons, ya que no la había marcado como tabla del sistema cuando la creé en el pasado.
Tenga en cuenta lo siguiente:
TableDefs!MyTableName requerirá que haga algo de buscar y reemplazar para esas instancias en su código/interfaz de usuario).