Ci sono diverse cose che fanno presumere qualche chiarimento necessario…
Ad esempio:
'La query è stata creata, la eseguo per popolarla e la chiudo subito.
If blnQueryOk = True Then
DoCmd.OpenQuery (strNomeQuery)
DoCmd.Close acQuery, strNomeQuery
End If
Questo codice non serve veramente a nulla… perchè la Query NON si popola, una query SELECT non si lancia…
Una query SELECT si usa come Origine di dati con un Recordset o diretta in una Form, mai e ripeto MAI si apre una query Select come hai fatto, è inuitile e pericolosissimo in quanto l'interfaccia della Query non ha quegli strumenti di CONTROLLO dei dati tale da poter prevenire danni.
Ti faccio un esempio, se apri una Query da QBE come hai fatto chiunque, a prescindere dai privilegi può mettere mano ai dati, sia Vederli che Editarli che cancellarli(ovviamente se la query lo consente), il problema è che non deve essere la query a gestire i privilegi ma il programmatore in modo consapevole, e questo lo si può fare SOLO sfruttando l'interfaccia utente data dalle Maschere.
Purtroppo spesso chi usa Access è carente dei principi di base sullo sviluppo delle interfacce, in quanto tutto è permesso avendo accesso sia alla parte Client che Server, sviluppando con un RDBMS è come se tu consentissi agli utenti di aprire una Tabella in Oracle… ovviamente verrebbe da fare una riflessione attenta a questi principi.
Ora, tornando a noi, se vuoi editare una Tabella funziona sempre, ma se una Tabella senza PK da una parte e Fk dall'altra la relazioni in JOIN con altre tabelle in una query, la Query risultante sarà ReadOnly.