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

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

Sintomas

Quando chamar o método AddNew e, em seguida, chamar o método actualização de um conjunto de registos, é devolvido o seguinte erro:
Fornecedor Microsoft OLE DB para controladores de ODBC erro '80040e21'
[Microsoft][Controlador ODBC do Microsoft Access 97] Erro de sintaxe na INSERT INTO instrução.
Utilizar o controlador de ODBC do Microsoft Access version4.00.4202.00 ou posterior, a mensagem de erro é:
Run-time error '-2147467259(80004005) ':
[Microsoft][Controlador ODBC do Microsoft Access]Erro de sintaxe na instrução INSERT INTO.

Causa

Este erro ocorre se os seguintes são verdadeiras:
  • O CursorType é adOpenForwardOnly (0).
  • O CursorLocation é adUseServer.
  • Um campo que está a ser actualizado tem um espaço no nome do campo.
  • Está a utilizar o controlador de ODBC do Microsoft Access.
Chamar os métodos AddNew e actualização, um cursor do lado do servidor, só de reencaminhamento, é uma operação inválida. ActiveX Data Objects (ADO) compensa esta falha de código, gerar uma instrução INSERT para efectuar a operação. Quando o ADO gera a instrução INSERT, não delimitar a nomes de campo. Por conseguinte, os nomes de campo que contêm um espaço gerar um erro de sintaxe.

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

Resolução

Eis várias resoluções possíveis:
  • Não utilize espaços nos nomes de campo na base de dados.
  • Utilize um CursorLocation de adUseClient (3).
  • Não utilize um CursorType de adOpenForwardOnly (0), como, por exemplo, adOpenKeyset (1), adOpenDynamic (2) ou adOpenStatic (3).
  • Execute a operação gerando sua própria instrução INSERT, com os delimitadores nos nomes de campo, em vez de utilizar os métodos AddNew e actualização.
  • Utilize o Microsoft OLE DB Provider para Jet versão 3.51 ou 4.0 em vez do Microsoft OLE DB Provider para ODBC e o controlador ODBC do Microsoft Access.

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo.

Propriedades

Artigo: 189220 - Última revisão: 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
  • Controlador Microsoft Open Database Connectivity para Access 3.5
  • Controlador 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 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: 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