OVH Cloud OVH Cloud

Delete

2 réponses
Avatar
Annie L.
Voici ma procédure pour effacer des sous-commandes client :

adaOLEDB.SelectCommand = New OleDbCommand("SELECT * FROM SousCommClient",
cnnOLEDB)
adaOLEDB.SelectCommand.Transaction = txnOLEDB 'Démarre une transaction
cbuOLEDB = New OleDbCommandBuilder(adaOLEDB)
dstDivers.Clear()
adaOLEDB.Fill(dstDivers, "SousCommClient")
For Each drwRangee In gdstCommandeClient.Tables("CommandeClient").Rows
For Each drwRangeeCommFact In dstDivers.Tables("SousCommClient").Rows
If drwRangee.Item("CodeIDCommandeClient") = RangeeCommFact.Item
("CodeIDCommandeClient") Then
drwRangeeCommFact.Delete()
drwRangeeCommFact.AcceptChanges()
End If
Next
Next
adaOLEDB.Update(dstDivers, "SousCommandeClient")


Le problème est qu'il m'affiche une erreur = "La collection a été modifiée;
l'option d'énumérationpeut ne pas s'exécuter"

Pourquoi? J'ai rajouté "AcceptChanges" et rien n'y fait, même erreur!
J'ai mis le "Update" à la sortie et rien n'y fais, même erreur!
Si je n'efface qu'une seule ligne = pas de problème!
Mais si je veux effacer plusieurs lignes, l'erreur citée plus haut apparaît!

Qu'est-ce que je fais de pas correct!
J'aimerais comprendre et utiliser une bonne méthode!
Merci de vos suggestions!

2 réponses

Avatar
Fred
Dans son message
Annie L. nous dit :

Voici ma procédure pour effacer des sous-commandes client :

adaOLEDB.SelectCommand = New OleDbCommand("SELECT * FROM
SousCommClient", cnnOLEDB)
adaOLEDB.SelectCommand.Transaction = txnOLEDB 'Démarre une
transaction cbuOLEDB = New OleDbCommandBuilder(adaOLEDB)
dstDivers.Clear()
adaOLEDB.Fill(dstDivers, "SousCommClient")
For Each drwRangee In gdstCommandeClient.Tables("CommandeClient").Rows
For Each drwRangeeCommFact In
dstDivers.Tables("SousCommClient").Rows If
drwRangee.Item("CodeIDCommandeClient") = RangeeCommFact.Item
("CodeIDCommandeClient") Then drwRangeeCommFact.Delete()
drwRangeeCommFact.AcceptChanges()
End If
Next
Next
adaOLEDB.Update(dstDivers, "SousCommandeClient")


Le problème est qu'il m'affiche une erreur = "La collection a été
modifiée; l'option d'énumérationpeut ne pas s'exécuter"

Pourquoi? J'ai rajouté "AcceptChanges" et rien n'y fait, même erreur!
J'ai mis le "Update" à la sortie et rien n'y fais, même erreur!
Si je n'efface qu'une seule ligne = pas de problème!
Mais si je veux effacer plusieurs lignes, l'erreur citée plus haut
apparaît!

Qu'est-ce que je fais de pas correct!
J'aimerais comprendre et utiliser une bonne méthode!
Merci de vos suggestions!



Bonjour,
Au vu du message, ce serait le For Each qui ne passe pas.
Personnellement j'évite le For (Each ou Next) si je modifie le nombre
d'éléments parcourus.
Pourquoi pas un While dans ce cas ?

--
Fred
Avatar
Annie L.
J'ai essayé avec "Do While..." et cela fonctionne très bien.
Je vais suivre ton conseil et utiliser plus souvent "Do While" au lieu de
(For each)
Merci du tuyau!

"Fred" a écrit :

Dans son message
Annie L. nous dit :

> Voici ma procédure pour effacer des sous-commandes client :
>
> adaOLEDB.SelectCommand = New OleDbCommand("SELECT * FROM
> SousCommClient", cnnOLEDB)
> adaOLEDB.SelectCommand.Transaction = txnOLEDB 'Démarre une
> transaction cbuOLEDB = New OleDbCommandBuilder(adaOLEDB)
> dstDivers.Clear()
> adaOLEDB.Fill(dstDivers, "SousCommClient")
> For Each drwRangee In gdstCommandeClient.Tables("CommandeClient").Rows
> For Each drwRangeeCommFact In
> dstDivers.Tables("SousCommClient").Rows If
> drwRangee.Item("CodeIDCommandeClient") = RangeeCommFact.Item
> ("CodeIDCommandeClient") Then drwRangeeCommFact.Delete()
> drwRangeeCommFact.AcceptChanges()
> End If
> Next
> Next
> adaOLEDB.Update(dstDivers, "SousCommandeClient")
>
>
> Le problème est qu'il m'affiche une erreur = "La collection a été
> modifiée; l'option d'énumérationpeut ne pas s'exécuter"
>
> Pourquoi? J'ai rajouté "AcceptChanges" et rien n'y fait, même erreur!
> J'ai mis le "Update" à la sortie et rien n'y fais, même erreur!
> Si je n'efface qu'une seule ligne = pas de problème!
> Mais si je veux effacer plusieurs lignes, l'erreur citée plus haut
> apparaît!
>
> Qu'est-ce que je fais de pas correct!
> J'aimerais comprendre et utiliser une bonne méthode!
> Merci de vos suggestions!

Bonjour,
Au vu du message, ce serait le For Each qui ne passe pas.
Personnellement j'évite le For (Each ou Next) si je modifie le nombre
d'éléments parcourus.
Pourquoi pas un While dans ce cas ?

--
Fred