Bonjour à tous,
Dans un formulaire Access XP, j'utlise le code suivant pour mettre à jour
une table liée présente sur un MS SQL Server 2000 :
Dim MaBase As Database
Dim MaRequêteTemp As QueryDef
Dim MonSQL as String
Dim TheValeur as integer
[initialisation de la valeur TheValeur]
MonSQL = "UPDATE MaTable set MonChamp = " & Chr(34) & "X" & Chr(34)
MonSQL = MonSQL & " where MonID = " & TheValeur & ";"
Set MaBase = CurrentDb
Set MaRequêteTemp = MaBase.CreateQueryDef("", MonSQL)
MaRequêteTemp.Execute
MaRequêteTemp.Close
Set MaBase = Nothing
Le «MaRequêteTemp.Execute» remonte une erreur 3622 :
Vous devez utiliser l'option dbSeeChanges avec OpenRecordset lors de l'accès
à une table serveur SQL ayant une colonne IDENTITY. (Erreur 3622)
Je précise que :
1) le texte de ma requête est correct. Pour le tester, j'ai mis dans mon
code
Set MaRequêteTemp = MaBase.CreateQueryDef("toto", MonSQL)
puis lancé "à la main" la requête "toto" qui a parfaitement rempli son
office.
2) si à la place de
MaRequêteTemp.Close
j'utilise le code :
MonSQL = Left(MonSQL, Len(MonSQL) - 1) ' afin denlever le « ; »
DoCmd.RunSQL MonSQL
cela fonctionne parfaitement, mais avec la mise en garde «Vous allez mettre
à jour 1 ligne(s). ...»
3) Ma table liée possède effectivement une colonne Identity mais je vois pas
le rapport avec le OpenRecordset du message d'erreur !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
HervéR
Comme indiqué dans le 1), j'ai testé en faisant un Set MaRequêteTemp = MaBase.CreateQueryDef("toto", MonSQL) Lancée à la main, la requête qui porte le nom original de "toto" a parfaitement fonctionné. Du coup, je viens d'ajouter à mon code: MaBase.Execute ("toto") et cela me renvoie ma même erreur 3622 !!
Je ne vois vraiment pas ce qu'il peut y avoir :(
Comme indiqué dans le 1), j'ai testé en faisant un
Set MaRequêteTemp = MaBase.CreateQueryDef("toto", MonSQL)
Lancée à la main, la requête qui porte le nom original de "toto" a
parfaitement fonctionné.
Du coup, je viens d'ajouter à mon code:
MaBase.Execute ("toto")
et cela me renvoie ma même erreur 3622 !!
Comme indiqué dans le 1), j'ai testé en faisant un Set MaRequêteTemp = MaBase.CreateQueryDef("toto", MonSQL) Lancée à la main, la requête qui porte le nom original de "toto" a parfaitement fonctionné. Du coup, je viens d'ajouter à mon code: MaBase.Execute ("toto") et cela me renvoie ma même erreur 3622 !!
Je ne vois vraiment pas ce qu'il peut y avoir :(
HervéR
C'est encore moi :), -- ou plutôt :(
J'ai testé avec une instruction INSERT : ça passe bien. J'ai testé avec une instruction DELETE: même erreur 3622.
Quelqu'un aurait-il une idée ? Merci d'avance.
C'est encore moi :), -- ou plutôt :(
J'ai testé avec une instruction INSERT : ça passe bien.
J'ai testé avec une instruction DELETE: même erreur 3622.