PRB: ASP retorna o erro 'A operação deve usar uma consulta atualizável'

Traduções deste artigo Traduções deste artigo
ID do artigo: 175168 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Sintomas

Você encontrará o seguinte erro comum ao usar o ActiveX Data Objects (ADO) com Active Server Pages (ASP):
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access 97 Driver] A operação deve usar uma consulta atualizável.

Causa

Este artigo explica as quatro principais causas desse erro e as soluções alternativas correspondentes. Embora este artigo se refira a banco de dados do Microsoft Access, as informações fornecidas também se aplicam a outros tipos de banco de dados.

Resolução

Esse erro geralmente ocorre quando seu script tenta executar uma ATUALIZAÇÃO ou alguma outra ação que altera as informações no banco de dados. Esse erro ocorre porque o ADO não grava no banco de dados por um dos seguintes motivos:

  1. O motivo mais comum é o fato de a conta de convidado da Internet (IUSR_MACHINE), que, por padrão, faz parte do grupo "Todos", não ter permissões de gravação no arquivo de banco de dados (.mdb). Para corrigir esse problema, use a guia Segurança no Explorer para ajustar as propriedades para esse arquivo de modo que a conta de convidado da Internet tenha as permissões corretas.

    OBSERVAÇÃO: Ao usar o banco de dados do Microsoft Access com o ADO, também é necessário conceder permissões de gravação à conta de convidado da Internet no diretório que contém o arquivo .mdb. Isso ocorre porque o Jet cria um arquivo .ldb para lidar com o bloqueio do banco de dados. Também é necessário conceder permissões de leitura/gravação na pasta "Temp" porque o Jet pode criar arquivos temporários nesse diretório.
  2. Uma segunda causa desse erro é o fato de o banco de dados não ser aberto com o MODO correto para gravação. Se você executar Abrir no objeto Conexão, irá usar a propriedade Modo para indicar as permissões da conexão, conforme mostrado aqui:
    
          SQL = "UPDATE Products Set UnitPrice = 2;"
          Set Conn = Server.CreateObject("ADODB.Connection")
          Conn.Mode = 3      '3 = adModeReadWrite
          Conn.Open "myDSN"
          Conn.Execute(SQL)
          Conn.Close
    
    						
    OBSERVAÇÃO: Por padrão, o MODO está configurado para 0(adModeUnknown), o que geralmente permite atualizações.
  3. Outra causa desse erro é o fato de a configuração "Somente leitura" estar marcada na página Opções para esse DSN no ODBC Manager.
  4. O último problema e a última solução alternativa refere-se a qualquer fonte de dados SQL. O erro pode ser causado por instruções SQL que violam a integridade referencial do banco de dados. Eis algumas consultas mais comuns que falham:
    • O grupo mais simples a usar é aquele que não altera: consultas de tabela de referência cruzada, consulta passagem SQL, consultas de união ou de atualização (ou de criação de tabela) que possuem propriedades UniqueValue configuradas para Sim.

    • Outra causa muito comum é quando a união inclui tabelas ODBC vinculadas que não possuem índices únicos. Nesse caso, não há como o SQL garantir que os registros são únicos em uma tabela que possui campos cujo valor irá alterar com a consulta.

    • Uma causa possui uma solução alternativa muito eficiente. Se você tentar atualização um campo de união no lado "um" de uma consulta "um-para-muitos", ela irá falhar, a menos que você ative atualizações em cascata. Desse modo, você delega integridade referencial ao mecanismo do JET.

Situação

Esse comportamento é próprio do projeto.

Propriedades

ID do artigo: 175168 - Última revisão: terça-feira, 2 de março de 2004 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft Active Server Pages 4.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.7
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
Palavras-chave: 
kberrmsg kbdatabase kbprb KB175168

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com