Erro: "Erro de sintaxe em INSERT INTO..." no ADO Recordset.Update

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

Sintomas

Quando você chama o método AddNew e chamar o método Update de um conjunto de registros, é retornado o seguinte erro:
Microsoft OLE DB Provider para ODBC drivers erro '80040e21'
[Microsoft][ODBC Microsoft Access 97 Driver] Erro de sintaxe em INSERT INTO instrução.
Usando o driver de ODBC do Microsoft Access version4.00.4202.00 ou posterior, a mensagem de erro é:
Erro em tempo de execução '-2147467259(80004005) ':
[Microsoft][ODBC Microsoft Access Driver]Erro de sintaxe na instrução INSERT INTO.

Causa

Este erro ocorre se as seguintes condições forem verdadeiras:
  • O CursorType é adOpenForwardOnly (0).
  • O CursorLocation é adUseServer.
  • Um campo que está sendo atualizado tem um espaço no nome do campo.
  • Você está usando o driver ODBC do Microsoft Access.
Chamar os métodos AddNew e Update, em um cursor Server-side, Forward-only, é uma operação inválida. ActiveX Data Objects (ADO) compensa para essa falha de código por gerar uma instrução INSERT para executar a operação. Quando o ADO gera a instrução INSERT, ele não delimitar os nomes de campo. Portanto, os nomes de campo que contêm um espaço gerar um erro de sintaxe.

Por exemplo, uma instrução INSERT válida seria assim:
   INSERT INTO Table ([field with space]) Values(value)
				
ADO gera o código a seguir:
   INSERT INTO Table (field with space) Values(value)
				

Resolução

Aqui estão várias resoluções possíveis:
  • Não use espaços nos nomes de campo no banco de dados.
  • Use um CursorLocation de adUseClient (3).
  • Não use um CursorType de adOpenForwardOnly (0), como adOpenKeyset (1), adOpenDynamic (2) ou adOpenStatic (3).
  • Execute a operação gerando sua própria instrução INSERT, com delimitadores nos nomes de campo, em vez de usar os métodos AddNew e Update.
  • Use o provedor Microsoft OLE DB para Jet versão 3.51 ou 4.0 em vez do Microsoft OLE DB Provider para ODBC e o driver de ODBC do Microsoft Access.

Situação

A Microsoft confirmou este é um bug em produtos Microsoft listados no começo deste artigo.

Propriedades

ID do artigo: 189220 - Última revisão: quarta-feira, 2 de março de 2005 - Revisão: 2.2
A informação contida neste artigo aplica-se a:
  • Microsoft Data Access Components 1.5
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1 Service Pack 2
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
  • Driver Microsoft Open Database Connectivity para Access 3.5
  • Driver Microsoft Open Database Connectivity para Access 4.0
Palavras-chave: 
kbmt kbbug kbdatabase kbdriver kbjet KB189220 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 189220

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