<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Errore di accesso alla tabella MSysRelationships</title> <link rel="stylesheet" type="text/css" href="Main.css" /> </head> <body> <h1>Errore di accesso alla tabella MSysRelationships</h1> <br/> <b>Nota bene</b><br />In generale &#232; sconsigliato l&#39;utilizzo di database in formato Access per la normale operativit&#224;. Tali database sono tuttavia utili per passare i dati tra sistemi diversi. In certi casi &#232; l&#39;unica opzione disponibile, ad esempio, quando si desidera trasferire dati tra DBMS diversi oppure tra versioni diverse dello stesso DBMS.<br />Gli errori indicati di seguito non capitano se viene utilizzato il database fornito con gli applicativi 4Planning in quanto i passi indicati sono gi&#224; stati effettuati.<br /> <h2>Sintomi</h2> Nel momento in cui vengono lette le relazioni, pu&#242; uscire uno tra questi errori:<br />[42000] [Microsoft][ODBC Microsoft Access Driver] Record(s) cannot be read; no read permission on &#39;MSysObjects&#39;. (-1907)<br />Impossibile leggere record. Autorizzazione di lettura non disponibile per &quot;MSysRelationships&quot;.<br />System.Data.OleDb.OleDbException (0x80040E09): Impossibile leggere record. Autorizzazione di lettura non disponibile per &quot;MSysRelationships&quot;.<br /> <h2>Informazioni generali</h2> Microsoft Access memorizza le relazioni e le foreign Keys in una tabella interna e nascosta chiamata MSysRelationships.<br />La tabella &#232; protetta da qualunque tipo di accesso (compresa la lettura) e da qualunque tipo di utente (compreso l&#39;utente Admin).<br /> <h2>Passi per abilitare l&#39;accesso alla tabella MSysRelationships.</h2> <b>Nota bene</b><br />Gli screen shots nella documentazione successiva sono stati effettuati utilizzando Microsoft Access 2016.<br />Lo stesso funzionamento &#232; ottenibile utilizzando una versione di Access pi&#249; recente o pi&#249; vecchia<br /><br />1. Aprire il database con Microsoft Access<br /><br />2. Selezionare la scheda Strumenti database<br /><br />3. Premere il pulsante Visual Basic (nel gruppo Macro)<br /><br />(E&#39; possibile accedere alla maschera di Microsoft Visual Basic anche dalla Scheda crea, pulsante Modulo presente nel gruppo Macro e codice)<br /><br /><img src="?Title=Open Visual Basic" /><br /><br />I comandi successivi verranno inseriti nella finestra <b>Immediata</b>.<br />Per poter eseguire il comando GRANT &#232; necessario essere connessi come Admin al database. In generale &#232; sempre cos&#236; ma si pu&#242; eventualmente verificare eseguendo, nella finestra immediata, il seguente comando:<br /><i>? CurrentUser</i><br />L&#39;output dovrebbe essere Admin<br /><br />4. Digitare il seguente comando nella finestra <b>Immediata</b><br />CurrentProject.Connection.Execute &quot;GRANT SELECT ON MSysRelationships TO Admin&quot;<br /><br /><img src="?Title=Visual Basic GRANT" /><br /><br /><br /><br /><br /><br /> </body> </html>