Sintomas Ao usar ActiveX Data Objects (ADO) com Active Server Pages (ASP), você pode encontrar os seguintes erros comuns:
Erro do provedor Microsoft OLE DB para drivers ODBC '80004005'
A operação [Microsoft][Driver ODBC Microsoft Access 97] deve usar uma consulta atualizável
Causa Este artigo descreve as quatro causas principais desse erro e as soluções alternativas correspondentes. Embora este artigo discuta bancos de dados do Microsoft Access, as informações fornecidas aqui também se aplicam a outros tipos de bancos de dados.
Solução Normalmente você encontra esse erro quando seu script tenta realizar uma atualização ou executar alguma outra ação que altere informações no banco de dados. Este erro ocorre porque o ADO não pode gravar no banco de dados por um dos seguintes motivos:
1. O motivo mais comum é que a conta de convidado da Internet (IUSR_MACHINE, que por padrão pertence ao grupo "Todos") não tem acesso ao arquivo de banco de dados (.mdb) Permissão de gravação. Para resolver esse problema, use a guia Segurança no Explorer para ajustar as propriedades desse arquivo para que a conta Convidado da Internet tenha as permissões corretas.
Observação: ao usar um banco de dados Microsoft Access com ADO, você também deve 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 que trata do bloqueio do banco de dados. Como o Jet pode criar arquivos temporários no diretório "Temp", talvez você também precise conceder permissões de leitura/gravação para essa pasta.
2. A segunda razão para este erro é que o banco de dados não foi aberto no modo correto com permissões de gravação. Se você realizar uma operação Open em um objeto Connection, deverá usar a propriedade Mode para indicar as permissões que possui na conexão, conforme a seguir:
SQL = "UPDATE Conjunto de produtos UnitPrice = 2;"
Definir Conexão = Server.CreateObject("ADODB.Connection")
Conn.Mode = 3 '3 = adModeReadWrite
Conexão.Abrir "myDSN"
Conexão.Executar(SQL)
Conexão Fechar
Observação: por padrão, MODE é definido como 0 (adModeUnknown), o que geralmente permite atualizações.
3. Outro motivo para esse erro é que no Administrador ODBC, a configuração "Somente leitura" na página "Opções" do DSN pode estar selecionada.
4. O último problema e solução alternativa se aplicam a todas as fontes de dados SQL. Instruções SQL que violam a integridade referencial do banco de dados podem causar a ocorrência desse erro. Aqui estão algumas das consultas com falha mais comuns:
• O conjunto mais simples de consultas são aqueles que não podem ser alterados: consultas de tabela cruzada, consultas de passagem SQL, consultas de união ou consultas de operação de atualização (ou seja, criação de tabela) que têm a propriedade UniqueValue definida como Sim.
• Outro motivo muito comum é que a junção contém índices em tabelas ODBC vinculadas que não são exclusivos. Nesse caso, o SQL não pode garantir que os registros da tabela sejam únicos e os valores dos campos da tabela serão alterados com a consulta.
• Há uma razão pela qual existe de facto uma alternativa fiável. Se você tentar atualizar um campo de junção no lado "um" de uma consulta "um para muitos", a operação falhará, a menos que você habilite atualizações em cascata. Porque então você pode delegar a integridade referencial ao mecanismo JET.