Error: "Error de sintaxis en INSERT INTO..." en ADO Recordset.Update

Seleccione idioma Seleccione idioma
Id. de artículo: 189220 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

Síntomas

Cuando se llama al método AddNew y, a continuación, llame al método Update de un objeto Recordset, se devuelve el error siguiente:
Proveedor Microsoft OLE DB para ODBC Drivers error '80040e21'
[Microsoft][Controlador ODBC para Microsoft Access 97] Error de sintaxis en INSERT INTO instrucción.
Mediante el controlador ODBC de Microsoft Access version4.00.4202.00 o posterior, el mensaje de error es:
Error en tiempo de ejecución '-2147467259(80004005) ':
[Microsoft][Controlador ODBC para Microsoft Access]Error de sintaxis en instrucción INSERT INTO.

Causa

Este error se produce si se cumplen las siguientes condiciones:
  • CursorType del es adOpenForwardOnly (0).
  • CursorLocation es adUseServer.
  • Un campo que se está actualizando tiene un espacio en el nombre del campo.
  • Estás utilizando el controlador ODBC de Microsoft Access.
Llamar a los métodos AddNew y Update, en un cursor de servidor, sólo hacia delante, es una operación no válida. ActiveX Data Objects (ADO) compensa este defecto de código al generar una instrucción INSERT para realizar la operación. Cuando ADO genera la instrucción INSERT, no lo delimitar los nombres de campo. Por tanto, los nombres de campo que contienen un espacio generan un error de sintaxis.

Por ejemplo, una instrucción INSERT válida sería como sigue:
   INSERT INTO Table ([field with space]) Values(value)
				
ADO genera el siguiente código:
   INSERT INTO Table (field with space) Values(value)
				

Solución

Éstas son varias soluciones posibles:
  • No utilice espacios en los nombres de campo de la base de datos.
  • Utilice un CursorLocation de adUseClient (3).
  • No utilice un CursorType de adOpenForwardOnly (0), como adOpenKeyset (1), adOpenDynamic (2) o adOpenStatic (3).
  • Realizar la operación generar su propia instrucción INSERT, con delimitadores en los nombres de campo, en lugar de utilizar los métodos AddNew y Update.
  • Utilice el proveedor OLE DB para Jet versión 3.51 ó 4.0 en lugar del proveedor OLE DB para ODBC y el controlador ODBC de Microsoft Access.

Estado

Microsoft ha confirmado que se trata de un error de los productos Microsoft enumerados al principio de este artículo.

Propiedades

Id. de artículo: 189220 - Última revisión: miércoles, 2 de marzo de 2005 - Versión: 2.2
La información de este artículo se refiere 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
  • Microsoft Open Database Connectivity Driver para Access 3.5
  • Microsoft Open Database Connectivity Driver for Access 4.0
Palabras clave: 
kbmt kbbug kbdatabase kbdriver kbjet KB189220 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 189220

Enviar comentarios

 

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