PRB: "A operação tem de utilizar uma consulta atualizável" Quando acede ao Excel através do ODBC
Sintomas
Quando edita uma folha de cálculo do Excel através do ADO e do ODBC, poderá receber a seguinte mensagem de erro se utilizar um objeto ADO DataControl:
[Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Se utilizar um objeto Conjunto de registos gerado com código ADO, poderá receber a seguinte mensagem de erro ao editar uma folha de cálculo do Excel através do ADO e ODBC:
Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Causa
Este problema ocorre se tentar editar uma folha de cálculo guardada ou aberta como ReadOnly.
Nota
ReadOnly é a predefinição para uma ligação ODBC ao Excel, com ou sem um nome de origem de dados (DSN). Por conseguinte, o utilizador tem de alterar sempre essa definição para editar dados.
Resolução
Para resolver este problema, utilize os seguintes métodos:
Certifique-se de que a propriedade LockType do objeto ConjuntodeRegistos não está definida como ReadOnly.
Certifique-se de que o ficheiro que está a tentar abrir não está guardado como ReadOnly.
Se estiver a ligar através de um DSN, siga estes passos:
- Abra Painel de Controlo e, em seguida, clique em Administrador de Origem de Dados ODBC.
- Faça duplo clique no DSN.
- Na caixa de diálogo Configuração do Microsoft Excel ODBC, clique em Opções.
- Certifique-se de que a caixa de verificação Só de Leitura não está selecionada.
Se estiver a utilizar uma ligação sem DSN, certifique-se de que inclui a opção "ReadOnly=0" no cadeia de ligação. Por exemplo:
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
Estado
Este comportamento é por concepção.
Mais Informações
Passos para Reproduzir o Comportamento
Crie um novo projeto EXE Standard no Visual Basic.
No menu Projeto, clique em Referências e, em seguida, adicione uma referência à Biblioteca de Objetos de Dados do Microsoft ActiveX.
Adicionar um botão comando ao Form1.
Adicione o seguinte código ao 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
Guarde a aplicação.
Crie uma nova folha de cálculo do Excel e, em seguida, guarde a folha de cálculo como Test.xls.
No menu Inserir, aponte para Nome e, em seguida, clique em Definir.
Crie uma nova tabela dentro da folha de cálculo do Excel e, em seguida, atribua o nome TB1 à tabela.
Guarde a folha de cálculo na mesma pasta que a aplicação Visual Basic.
Prima F5 para executar a aplicação.
Referências
Para obter informações adicionais, consulte o seguinte artigo:
Espaço do Office: Sugestões e Truques para Scripting de Aplicações do Microsoft Office
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários