
L'ultima soluzione alternativa per l'errore 'Query is corrupt' introdotto con CVE-2019-1402.
La soluzione alternativa più recente per l'errore Query is corrupt introdotto con CVE-2019-1402 in MS Access.
Esistono altre soluzioni alternative che devono essere applicate a livello amministrativo, ad esempio disinstallando l'aggiornamento errato. A differenza di queste, l'intenzione di quella qui fornita è di funzionare modificando automaticamente il contenuto del MDB/ACCDB stesso con il minor lavoro possibile.
Microsoft ha rilasciato una correzione per questo problema il 2019-12-10 (patch day) che verrà installata automaticamente tramite WSUS ecc. per impostazione predefinita.
Questa soluzione alternativa dovrebbe quindi essere obsoleta dopo l'applicazione della correzione e chiunque l'abbia utilizzata può chiamare la funzione RemoveWorkaroundForCorruptedQueryIssue() per ripristinare lo stato originale dell'applicazione.
Assicurarsi che sia abilitato il riferimento Microsoft DAO 3.6 Object Library (compatibilità con le versioni precedenti) o Microsoft Office x.x Access Database Engine Object Library in VBA Editor -> Tools -> References (vedere #1 per maggiori dettagli).
Utilizzare il modulo basWorkaround.bas per implementare automaticamente la soluzione alternativa suggerita da Microsoft (usando una query invece di una tabella). Come precauzione, eseguire prima un backup del database.
Chiamare AddWorkaroundForCorruptedQueryIssue() per applicare la soluzione alternativa e RemoveWorkaroundForCorruptedQueryIssue() per rimuoverla in qualsiasi momento.
AddWorkaroundForCorruptedQueryIssue() aggiungerà il suffisso _Table a tutte le tabelle non di sistema, ad esempio la tabella IceCreams verrebbe rinominata in IceCreams_Table.
Creerà inoltre una nuova query con il nome della tabella originale che selezionerà tutte le colonne della tabella rinominata. Nel nostro esempio, la query si chiamerebbe IceCreams ed eseguirebbe l'SQL select * from [IceCreams_Table].
RemoveWorkaroundForCorruptedQueryIssue() esegue le azioni inverse.
Sto utilizzando questa soluzione alternativa su progetti di grandi dimensioni con oltre 400 tabelle di vario tipo, incluse tabelle esterne non MDB (come SQL Server).
Nel mio caso ho dovuto rinominare manualmente USysRibbons_Table di nuovo in USysRibbons, poiché non l'avevo contrassegnata come tabella di sistema quando l'avevo creata in passato.
Tenere presenti i seguenti punti:
TableDefs!MyTableName richiederà di eseguire una ricerca e sostituzione per quelle istanze nel codice/interfaccia utente).