Bonjour ,

dans une application en VB6 reliée à une base Oracle via une connexion ADO, je déclare un recordset de la manière suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Dim vRs As ADODB.Recordset
Dim vSQLTmp As String
qui va exécuter la requête suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
SELECT ANE_AN, ANE_COD, ANP_COD, ANS_COD,
COUNT(ANS_COD) OVER(PARTITION BY ANE_AN, ANE_COD, ANP_COD) AS NBSEQ,
SSQ_FLG, SQ_FLG
FROM W_ANIM_CDE_FR
J'ouvre un recordset qui exécute la requête ci dessus dont les propriétés sont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
CursorLocation=adUseClient, CursorType=adOpenStatic, LockType=adLockBatchOptimistic
J'exécute par la suite le bloc de code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Do Until vRs.EOF
[...]
 
    vRs!SSQ_FLG = "1"
 
[...]
Loop
vRs.close
vRs.UpdateBatch
 
End Sub
Quand on arrive sur l'instruction d'affectation vRs!SSQ_FLG = "1", l'erreur suivante se produit :

Erreur d'exécution '-2147217887 (80040e21)' :
Une opération en plusieurs étapes a généré des erreurs. Vérifier chaque valeur d'état.

Le champ SSQ_FLG est de type varchar2 d'une taille de 1 octet.

Lorsque je passe par une requête UPDATE pour mettre à jour SSQ_FLG, ça marche, mais du coup je perds l'avantage de la mise à jour par lot du UpdateBatch( ).

Serait ce à cause de la fonction d'aggrégation SELECT COUNT( ) propre à ORACLE, ou bien à cause du paramétrage de mon recordset ?

Une aide de votre part serait la bienvenue

Merci