ASP devolve o erro "Operação tem de utilizar uma consulta actualizável"

Traduções de Artigos Traduções de Artigos
Artigo: 175168 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sintomas

Pode encontrar o seguinte erro comum ao utilizar o ActiveX Data Objects (ADO) com o Active Server Pages (ASP):
Fornecedor Microsoft OLE DB para controladores de ODBC erro '80004005'
[Microsoft][Controlador ODBC do Microsoft Access 97] Operação tem de utilizar uma consulta actualizável.

Causa

Este artigo explica as quatro causas principais deste erro e as correspondentes soluções. Apesar deste artigo se referir a bases de dados do Microsoft Access, as informações fornecidas aqui também se aplicam a outros tipos de bases de dados.

Resolução

Este erro normalmente é encontrado quando o script tenta efectuar uma UPDATE ou qualquer outra acção que altera informações da base de dados. Este erro ocorre porque o ADO não consegue escrever na base de dados para um dos seguintes motivos:

  1. A razão mais comum é que a conta de convidado da Internet (IUSR_MACHINE), que está por predefinição parte o "" grupo Todos, não tem permissões de escrita no ficheiro de base de dados (.mdb). Para corrigir este problema, utilize o separador Segurança do Explorer para ajustar as propriedades para este ficheiro para que a conta de convidado da Internet tenha as permissões correctas.

    Nota : quando utilizar bases de dados do Microsoft Access com o ADO, também é necessário fornecer a conta de convidado da Internet permissões de escrita no directório que contém o ficheiro .mdb. Isto acontece porque Jet cria um ficheiro .ldb para processar o bloqueio de base de dados. Também poderá ser necessário conceder permissão de leitura/escrita na pasta "Temp" porque Jet pode criar ficheiros temporários existentes neste directório.
  2. Uma segunda causa deste erro é que a base de dados não foi aberto com o modo correcto para escrita. Se efectuar o abrir no objecto de ligação, utilize a propriedade de modo para indicar as permissões sobre a ligação tal como 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
    
    						
    Nota : por predefinição, o modo estiver definido como 0(adModeUnknown), que normalmente permite actualizações.
  3. Outra causa deste erro é que a definição "Ler apenas" pode ser verificada na página Opções para este DSN no Gestor de ODBC.
  4. O último número e contornar diz respeito a qualquer origem de dados SQL. O erro pode dever-se instruções de SQL que violem a integridade referencial da base de dados. Eis algumas das consultas mais comuns que efectuar a activação pós-falha:
    • Os grupos mais simples para lidar com são os que não é possível alterar: referência cruzada, SQL pass-through, união, ou actualização (ou criar tabela) consultas de acção com propriedades UniqueValue definidas para Sim.

    • Outra causa muito comum é quando a associação inclui tabelas ODBC ligadas que não tenham índices exclusivos. Neste caso, não é possível para SQL garantir que os registos sejam exclusivos numa tabela que tenha campos cujo valor irá alterar a consulta.

    • Uma causa tem uma solução robusta. Se tentar actualizar um campo de associação no lado "um" de uma consulta de "um-para-muitos" falhará, a menos que active actualizações em cascata. Desta forma, delegar a integridade referencial para o motor JET.

Ponto Da Situação

Este comportamento ocorre por predefinição.

Propriedades

Artigo: 175168 - Última revisão: 23 de janeiro de 2006 - Revisão: 4.3
A informação contida neste artigo aplica-se a:
  • Microsoft Active Server Pages 4.0
  • Microsoft Internet Information Server 4.0
  • Serviços de informação Internet 5.0 da Microsoft
  • 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: 
kbmt kbdatabase kberrmsg kbprb KB175168 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 175168

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