PRB: "L'operazione deve usare una query aggiornabile" quando si accede a Excel tramite ODBC
Sintomi
Quando si modifica un foglio di lavoro di Excel tramite ADO e ODBC, è possibile che venga visualizzato il messaggio di errore seguente se si usa un oggetto ADO DataControl:
[Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Se si utilizza un oggetto Recordset generato con codice ADO, è possibile che venga visualizzato il messaggio di errore seguente quando si modifica un foglio di lavoro di Excel tramite ADO e ODBC:
Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Causa
Questo problema si verifica se si tenta di modificare un foglio di lavoro salvato o aperto come ReadOnly.
Nota
ReadOnly è l'impostazione predefinita per una connessione ODBC a Excel, con o senza un nome di origine dati (DSN). Pertanto, l'utente deve sempre modificare tale impostazione per modificare i dati.
Risoluzione
Per risolvere il problema, usare i metodi seguenti:
Assicurarsi che la proprietà LockType dell'oggetto Recordset non sia impostata su ReadOnly.
Assicurarsi che il file che si sta tentando di aprire non sia salvato come ReadOnly.
Se ci si connette tramite un DSN, seguire questa procedura:
- Aprire Pannello di controllo e quindi fare clic su Amministratore origine dati ODBC.
- Fare doppio clic sul DSN.
- Nella finestra di dialogo Installazione odbc di Microsoft Excel fare clic su Opzioni.
- Assicurarsi che la casella di controllo ReadOnly non sia selezionata.
Se si usa una connessione senza DSN, assicurarsi di includere l'opzione "ReadOnly=0" nel stringa di connessione. Ad esempio:
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
Stato
Si tratta di un comportamento legato alla progettazione del prodotto.
Ulteriori informazioni
Passaggi per riprodurre il comportamento
Creare un nuovo progetto EXE Standard in Visual Basic.
Scegliere Riferimenti dal menu Progetto e quindi aggiungere un riferimento a Microsoft ActiveX Data Objects Library.
Aggiungere un pulsante Di comando a Form1.
Aggiungere il codice seguente a Form1:
Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Private Sub Form_Load() Command1.Caption = "Edit" End Sub Private Sub Command1_Click() Dim DocPath As String DocPath = App.Path & "\Test.xls" Set cn = New Connection Set rs = New Recordset cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & DocPath & ";ReadOnly=1" rs.LockType = adLockOptimistic rs.Open "TB1", cn rs.AddNew rs.Fields(1).Value = "New Value" rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub
Salvare l'applicazione.
Creare un nuovo foglio di lavoro di Excel e quindi salvare il foglio di lavoro come Test.xls.
Scegliere Nome dal menu Inserisci e quindi fare clic su Definisci.
Creare una nuova tabella all'interno del foglio di lavoro di Excel e quindi denominare la tabella TB1.
Salvare il foglio di lavoro nella stessa cartella dell'applicazione Visual Basic.
Premere F5 per eseguire l'applicazione.
Riferimenti
Per altre informazioni, vedere l'articolo seguente:
Office Space: suggerimenti e consigli per lo scripting di applicazioni di Microsoft Office
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per