PRB : « L’opération doit utiliser une requête modifiable » Lorsque vous accédez à Excel via ODBC
Symptômes
Lorsque vous modifiez une feuille de calcul Excel via ADO et ODBC, le message d’erreur suivant peut s’afficher si vous utilisez un objet DataControl ADO :
[Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Si vous utilisez un objet Recordset généré avec du code ADO, vous pouvez recevoir le message d’erreur suivant lorsque vous modifiez une feuille de calcul Excel via ADO et ODBC :
Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Cause
Ce problème se produit si vous essayez de modifier une feuille de calcul enregistrée ou ouverte en lecture seule.
Remarque
ReadOnly est le paramètre par défaut pour une connexion ODBC à Excel, avec ou sans nom de source de données (DSN). Par conséquent, l’utilisateur doit toujours modifier ce paramètre pour modifier les données.
Résolution
Pour résoudre ce problème, utilisez les méthodes suivantes :
Assurez-vous que la propriété LockType de l’objet Recordset n’est pas définie sur ReadOnly.
Assurez-vous que le fichier que vous essayez d’ouvrir n’est pas enregistré en tant que ReadOnly.
Si vous vous connectez via un DSN, procédez comme suit :
- Ouvrez Panneau de configuration, puis cliquez sur Administrateur de source de données ODBC.
- Double-cliquez sur votre DSN.
- Dans la boîte de dialogue Configuration de Microsoft Excel ODBC, cliquez sur Options.
- Assurez-vous que la zone ReadOnly case activée n’est pas sélectionnée.
Si vous utilisez une connexion sans DSN, veillez à inclure l’option « ReadOnly=0 » dans le chaîne de connexion. Par exemple :
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
Statut
Ce comportement est inhérent au produit.
Informations supplémentaires
Étapes pour reproduire le comportement
Créez un projet EXE Standard en Visual Basic.
Dans le menu Projet, cliquez sur Références, puis ajoutez une référence à la bibliothèque Microsoft ActiveX Data Objects.
Ajouter un bouton Commande à Form1.
Ajoutez le code suivant à Form1 :
Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Private Sub Form_Load() Command1.Caption = "Edit" End Sub Private Sub Command1_Click() Dim DocPath As String DocPath = App.Path & "\Test.xls" Set cn = New Connection Set rs = New Recordset cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & DocPath & ";ReadOnly=1" rs.LockType = adLockOptimistic rs.Open "TB1", cn rs.AddNew rs.Fields(1).Value = "New Value" rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub
Enregistrez l’application.
Créez une feuille de calcul Excel, puis enregistrez-la en tant que Test.xls.
Dans le menu Insertion, pointez sur Nom, puis cliquez sur Définir.
Créez un tableau dans la feuille de calcul Excel, puis nommez le tableau TB1.
Enregistrez la feuille de calcul dans le même dossier que l’application Visual Basic.
Appuyez sur F5 pour exécuter l'application.
References
Pour plus d’informations, consultez l’article suivant :
Espace office : conseils et astuces pour l’écriture de scripts d’applications Microsoft Office
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour