BOGUE: «erreur de syntaxe dans INSERT INTO...» sur Recordset.Update ADO

IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.

La version anglaise de cet article est la suivante: 189220
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Symptômes
Lorsque vous appelez la méthode AddNew, puis appelez la méthode Update d'un objet Recordset, l'erreur suivante est renvoyée :
Fournisseur Microsoft OLE DB pour pilotes ODBC erreur '80040e21'
[Microsoft][Pilote ODBC Microsoft Access 97] Erreur de syntaxe dans INSERT INTO instruction.
À l'aide de la version4.00.4202.00 de pilote ODBC Microsoft Access ou une version ultérieure, le message d'erreur est :
Erreur d'exécution '-2147467259(80004005) ' :
[Microsoft][Pilote ODBC Microsoft Access]Erreur de syntaxe dans l'instruction INSERT INTO.
Cause
Cette erreur se produit si les conditions suivantes sont remplies :
  • Le CursorType est adOpenForwardOnly (0).
  • La CursorLocation est adUseServer.
  • Un champ en cours de mise à jour a un espace dans le nom du champ.
  • Vous utilisez le pilote Microsoft Access ODBC.
Appeler les méthodes AddNew et Update, sur un curseur côté serveur, Forward-Only, est une opération qui n'est pas valide. ActiveX Data Objects (ADO) compense cette faille de code en générant une instruction INSERT pour effectuer l'opération. Lorsque ADO génère l'instruction INSERT, il ne délimitez pas les noms de champ. Par conséquent, les noms de champ contenant un espace génèrent une erreur de syntaxe.

Par exemple, une instruction INSERT correcte serait comme suit :
   INSERT INTO Table ([field with space]) Values(value)				
ADO génère le code suivant :
   INSERT INTO Table (field with space) Values(value)				
Résolution
Voici plusieurs résolutions possibles :
  • N'utilisez pas d'espaces dans les noms de champs dans votre base de données.
  • Utilisez une CursorLocation d'adUseClient (3).
  • N'utilisez pas un CursorType d'adOpenForwardOnly (0), tels qu'adOpenKeyset (1), adOpenDynamic (2) ou adOpenStatic (3).
  • Effectuer l'opération en générant votre propre instruction INSERT, avec des délimiteurs sur les noms de champ au lieu d'utiliser les méthodes AddNew et Update.
  • Utilisez le fournisseur OLE DB pour Jet version 3.51 ou 4.0 au lieu du fournisseur Microsoft OLE DB pour ODBC et le pilote ODBC Microsoft Access.
Statut
Microsoft a confirmé l'existence de ce bogue dans les produits Microsoft répertoriés au début de cet article.

Propriétés

ID d'article : 189220 - Dernière mise à jour : 12/05/2015 08:55:30 - Révision : 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, Pilote ODBC pour Access 3.5 de Microsoft, Pilote ODBC pour Access 4.0 de Microsoft

  • kbnosurvey kbarchive kbmt kbbug kbdatabase kbdriver kbjet KB189220 KbMtfr
Commentaires