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

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
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
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.

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 189220 - Última Revisão: 12/05/2015 08:55:33 - Revisão: 2.2

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

  • kbnosurvey kbarchive kbmt kbbug kbdatabase kbdriver kbjet KB189220 KbMtpt
Comentários