PROBLÈME : ASP renvoie une erreur 'L'opération doit utiliser une requête qui peut être mise à jour'

Traductions disponibles Traductions disponibles
Numéro d'article: 175168 - Voir les produits auxquels s'applique cet article
Cet article peut contenir des liens vers des informations en langue anglaise (pas encore traduites).
Agrandir tout | Réduire tout

Symptômes

Lorsque vous utilisez des objets ADO (ActiveX Data Objects) avec une page ASP (Active Server Pages), l'erreur commune suivante peut s'afficher :
Erreur '80004005' du fournisseur Microsoft OLE DB pour les pilotes ODBC
[Microsoft][Pilote ODBC pour Microsoft Access 97] L'opération doit utiliser une requête qui peut être mise à jour.

Cause

Cet article explique les quatre causes principales de cette erreur et les solutions de contournement correspondantes. Bien que cet article fasse référence à des bases de données Microsoft Access, les informations fournies ici s'appliquent également à d'autres types de bases de données.

Résolution

Cette erreur s'affiche principalement lorsque votre script tente d'exécuter une MISE À JOUR ou une autre action qui modifie les informations de la base de données. L'erreur se produit parce que les objets ADO ne sont pas en mesure d'écrire dans la base de données pour l'une des raisons suivantes :

  1. La raison plus commune est que le compte Invité Internet (IUSR_MACHINE) qui appartient par défaut au groupe "Tout le monde", n'est pas autorisé en écriture sur le fichier de la base de données (.mdb). Pour corriger ce problème, utilisez l'onglet Sécurité d'Internet Explorer afin d'adapter les propriétés de ce fichier pour que le compte Invité Internet dispose des autorisations appropriées.

    REMARQUE : lors de l'utilisation de bases de données Microsoft Access avec des objets ADO, il est également nécessaire d'autoriser en écriture le répertoire contenant le fichier .mdb pour le compte Invité Internet. C'est pourquoi Jet crée un fichier .ldb permettant de gérer le verrouillage de la base de données. Vous devez également autoriser le dossier "Temp" en lecture/écriture car Jet peut également y créer des fichiers temporaires.
  2. La deuxième cause probable de cette erreur provient de la base de données qui n'a pas été ouverte avec le MODE d'écriture approprié. Si vous effectuez une ouverture (Open) sur l'objet Connection, vous utilisez la propriété Mode pour indiquer les autorisations sur la connexion comme indiqué ci-après :
    
          SQL = "UPDATE Products Set UnitPrice = 2;"
          Set Conn = Server.CreateObject("ADODB.Connection")
          Conn.Mode = 3      '3 = adModeReadWrite
          Conn.Open "myDSN"
          Conn.Execute(SQL)
          Conn.Close
    
    						
    REMARQUE : par défaut, la propriété Mode est définie avec la valeur 0 (adModeUnknown), ce qui autorise généralement les mises à jour.
  3. Autre cause de cette erreur, il est possible que le paramètre "Lecture seule" soit activé dans la page Options pour ce nom de la source de données dans le Gestionnaire ODBC.
  4. Le dernier problème et sa solution de contournement concernent la source de données SQL. L'erreur peut provenir d'instructions SQL qui bouleversent l'intégrité référentielle de la base de données. Voici quelques exemples de requêtes dont l'exécution échoue le plus souvent :
    • Les groupes les plus simples concernés sont ceux que vous ne pouvez pas modifier : les requêtes d'action d'analyse croisée, directes SQL, d'union ou de mise à jour (ou de création de table) dont la propriété UniqueValue est définie avec la valeur Oui.

    • Une autre cause très classique est lorsque la jointure comprend des tables ODBC liées dont les index ne sont pas uniques. Dans ce cas, il n'existe aucun moyen pour SQL de garantir l'unicité des enregistrements dans une table dont la valeur des champs sera modifiée par la requête.

    • La solution de contournement d'une cause est fiable. Si vous tentez de mettre à jour un champ de jointure du côté "un" d'une requête "un à plusieurs", cette opération échoue à moins que vous n'activiez des mises à jour en cascade. Vous déléguez ainsi l'intégrité référentielle au moteur JET.

Statut

Ce comportement est voulu par la conception même du produit.

Propriétés

Numéro d'article: 175168 - Dernière mise à jour: lundi 4 octobre 2004 - Version: 4.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Active Server Pages 4.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.7
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
Mots-clés : 
kberrmsg kbdatabase kbprb KB175168
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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